Port pokemon_jump from emerald, 1

This commit is contained in:
PikalaxALT
2020-02-18 14:50:24 -05:00
parent e4d15a2338
commit af6f99b931
10 changed files with 2494 additions and 5053 deletions
+254
View File
@@ -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]++;
}
}
+2068
View File
File diff suppressed because it is too large Load Diff