Port pokemon_jump from emerald, 1
This commit is contained in:
@@ -0,0 +1,254 @@
|
||||
#include "global.h"
|
||||
#include "gflib.h"
|
||||
#include "battle_anim.h"
|
||||
#include "decompress.h"
|
||||
#include "link.h"
|
||||
#include "link_rfu.h"
|
||||
#include "task.h"
|
||||
#include "constants/songs.h"
|
||||
|
||||
static void sub_8147654(u8 taskId);
|
||||
static void sub_81477C0(u8 taskId);
|
||||
static void sub_814784C(u8 taskId);
|
||||
static void sub_81479D4(u8 taskId);
|
||||
static void sub_8147A34(u8 taskId);
|
||||
|
||||
static const u16 gUnknown_846AFE8[] = INCBIN_U16("graphics/misc/unk_846B008.gbapal");
|
||||
static const u32 gUnknown_846B008[] = INCBIN_U32("graphics/misc/unk_846B008.4bpp.lz");
|
||||
|
||||
static const struct CompressedSpriteSheet gUnknown_846B42C[] = {
|
||||
{gUnknown_846B008, 0x0C00, 0x2000},
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct SpritePalette gUnknown_846B43C[] = {
|
||||
{gUnknown_846AFE8, 0x2000},
|
||||
{}
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_846B44C[] = {
|
||||
ANIMCMD_FRAME(0x00, 0),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_846B454[] = {
|
||||
ANIMCMD_FRAME(0x10, 0),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_846B45C[] = {
|
||||
ANIMCMD_FRAME(0x20, 0),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_846B464[] = {
|
||||
ANIMCMD_FRAME(0x40, 0),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_846B46C[] = {
|
||||
ANIMCMD_FRAME(0x30, 0),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd gUnknown_846B474[] = {
|
||||
ANIMCMD_FRAME(0x50, 0),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
static const union AnimCmd *const gUnknown_846B47C[] = {
|
||||
gUnknown_846B44C,
|
||||
gUnknown_846B454,
|
||||
gUnknown_846B45C,
|
||||
gUnknown_846B464,
|
||||
gUnknown_846B46C,
|
||||
gUnknown_846B474
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate gUnknown_846B494[] = {
|
||||
{
|
||||
.tileTag = 0x2000,
|
||||
.paletteTag = 0x2000,
|
||||
.oam = &gOamData_AffineOff_ObjNormal_32x32,
|
||||
.anims = gUnknown_846B47C,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCallbackDummy
|
||||
},
|
||||
};
|
||||
|
||||
static const TaskFunc gUnknown_846B4AC[][4] = {
|
||||
{ sub_81477C0, sub_814784C, sub_81479D4, sub_8147A34 }
|
||||
};
|
||||
|
||||
// Unused, but looks like it was intended to be a hook
|
||||
UNUSED u8 sub_81475C0(u8 data1, u8 priority)
|
||||
{
|
||||
u8 taskId;
|
||||
struct Task * task;
|
||||
|
||||
taskId = CreateTask(sub_8147654, priority);
|
||||
task = &gTasks[taskId];
|
||||
task->data[0] = 1;
|
||||
task->data[1] = data1;
|
||||
gUnknown_846B4AC[data1][0](taskId);
|
||||
return taskId;
|
||||
}
|
||||
|
||||
// Unused, but looks like it was intended to be a hook
|
||||
UNUSED bool32 sub_814760C(void)
|
||||
{
|
||||
u8 taskId;
|
||||
|
||||
taskId = FindTaskIdByFunc(sub_8147654);
|
||||
if (taskId == 0xFF)
|
||||
return FALSE;
|
||||
gTasks[taskId].data[0] = 2;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// Unused, but looks like it was intended to be a hook
|
||||
UNUSED bool32 sub_8147640(void)
|
||||
{
|
||||
return FuncIsActiveTask(sub_8147654);
|
||||
}
|
||||
|
||||
static void sub_8147654(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
|
||||
switch (data[0])
|
||||
{
|
||||
case 2:
|
||||
gUnknown_846B4AC[data[1]][2](taskId);
|
||||
data[0] = 3;
|
||||
break;
|
||||
case 3:
|
||||
gUnknown_846B4AC[data[1]][3](taskId);
|
||||
break;
|
||||
case 4:
|
||||
gUnknown_846B4AC[data[1]][1](taskId);
|
||||
DestroyTask(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_81476E0(u8 taskId, s16 *data)
|
||||
{
|
||||
u8 i;
|
||||
struct Sprite *sprite;
|
||||
|
||||
LoadCompressedSpriteSheet(&gUnknown_846B42C[data[3]]);
|
||||
LoadSpritePalette(&gUnknown_846B43C[data[4]]);
|
||||
for (i = 0; i < data[8]; i++)
|
||||
data[13 + i] = CreateSprite(&gUnknown_846B494[data[2]], data[9], data[10], data[7]);
|
||||
for (i = 0; i < data[8]; i++)
|
||||
{
|
||||
sprite = &gSprites[data[13 + i]];
|
||||
sprite->oam.priority = data[6];
|
||||
sprite->invisible = TRUE;
|
||||
sprite->data[1] = data[5];
|
||||
sprite->data[3] = taskId;
|
||||
sprite->data[4] = i;
|
||||
sprite->data[5] = data[13];
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_81477C0(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
data[2] = 0;
|
||||
data[3] = 0;
|
||||
data[4] = 0;
|
||||
data[5] = 60;
|
||||
data[6] = 0;
|
||||
data[7] = 0;
|
||||
data[8] = 3;
|
||||
data[9] = 120;
|
||||
data[10] = 88;
|
||||
sub_81476E0(taskId, data);
|
||||
|
||||
StartSpriteAnim(&gSprites[data[14]], 4);
|
||||
gSprites[data[14]].pos2.x = -32;
|
||||
|
||||
StartSpriteAnim(&gSprites[data[15]], 5);
|
||||
gSprites[data[15]].pos2.x = 32;
|
||||
}
|
||||
|
||||
static void sub_814784C(u8 taskId)
|
||||
{
|
||||
u8 i = 0;
|
||||
s16 *data = gTasks[taskId].data;
|
||||
|
||||
for (i = 0; i < data[8]; i++)
|
||||
DestroySprite(&gSprites[data[13 + i]]);
|
||||
FreeSpriteTilesByTag(gUnknown_846B42C[data[3]].tag);
|
||||
FreeSpritePaletteByTag(gUnknown_846B43C[data[4]].tag);
|
||||
}
|
||||
|
||||
static void sub_81478BC(struct Sprite *sprite)
|
||||
{
|
||||
s16 *data = gTasks[sprite->data[3]].data;
|
||||
|
||||
if (data[11] % data[5] != 0)
|
||||
return;
|
||||
if (data[11] == data[10])
|
||||
return;
|
||||
|
||||
data[10] = data[11];
|
||||
switch (sprite->data[2])
|
||||
{
|
||||
case 0:
|
||||
sprite->invisible = FALSE;
|
||||
case 1:
|
||||
case 2:
|
||||
PlaySE(SE_KON);
|
||||
StartSpriteAnim(sprite, sprite->data[2]);
|
||||
break;
|
||||
case 3:
|
||||
PlaySE(SE_PIN);
|
||||
StartSpriteAnim(sprite, sprite->data[2]);
|
||||
gSprites[data[14]].invisible = FALSE;
|
||||
gSprites[data[15]].invisible = FALSE;
|
||||
break;
|
||||
case 4:
|
||||
sprite->invisible = TRUE;
|
||||
gSprites[data[14]].invisible = TRUE;
|
||||
gSprites[data[15]].invisible = TRUE;
|
||||
data[0] = 4;
|
||||
return;
|
||||
}
|
||||
sprite->data[2]++;
|
||||
}
|
||||
|
||||
static void sub_81479D4(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
PlaySE(SE_KON);
|
||||
gSprites[data[13]].callback = sub_81478BC;
|
||||
gSprites[data[13]].invisible = FALSE;
|
||||
gTasks[taskId].data[0] = 3;
|
||||
}
|
||||
|
||||
static void sub_8147A34(u8 taskId)
|
||||
{
|
||||
u16 packet[6];
|
||||
s16 *data = gTasks[taskId].data;
|
||||
|
||||
if (gReceivedRemoteLinkPlayers != 0)
|
||||
{
|
||||
if (gRecvCmds[0][1] == 0x7FFF)
|
||||
data[11] = gRecvCmds[0][2];
|
||||
if (GetMultiplayerId() == 0)
|
||||
{
|
||||
data[12]++;
|
||||
memset(packet, 0, sizeof(packet));
|
||||
packet[0] = 0x7FFF;
|
||||
packet[1] = data[12];
|
||||
RfuPrepareSend0x2f00(packet);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
data[11]++;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user