start decompiling dark_meta_knight

This commit is contained in:
Zhengwen Jiang 2022-06-12 01:12:59 -05:00 committed by Egor Ananyin
parent 74e9669968
commit 1a0ffeba77
10 changed files with 867 additions and 4036 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,30 @@
#ifndef GUARD_DARK_META_KNIGHT_H
#define GUARD_DARK_META_KNIGHT_H
#include "global.h"
#include "data.h"
struct DarkMetaKnight
{
struct Object2 obj2;
struct ObjectBase *unkB4;
struct Object4 *unkB8;
struct Object4 *unkBC;
u8 unkC0;
u8 unkC1;
u8 unkC2;
u8 unkC3;
u8 unkC4;
u8 unkC5;
u8 unkC6;
u8 unkC7;
u8 unkC8;
u8 unkC9;
u8 unkCA;
s16 unkCC;
}; /* size = 0xD0 */
void *CreateDarkMetaKnight(struct Object *, u8);
void sub_080FFEA4(struct DarkMetaKnight *);
#endif

View File

@ -213,8 +213,8 @@ struct LevelInfo {
u8 unk65F;
u8 unk660;
u8 unk661;
u16 unk662;
u16 unk664;
s16 unk662;
s16 unk664;
}; /* size = 0x668 */
struct Object {

View File

@ -362,6 +362,7 @@ void m4aSoundVSync(void);
void m4aSoundMain(void);
void m4aSoundInit(void);
void m4aSongNumStartOrChange(u16);
void m4aMPlayFadeIn(struct MusicPlayerInfo *mplayInfo, u16 speed);
void m4aMPlayFadeOut(struct MusicPlayerInfo *mplayInfo, u16 speed);
void m4aSongNumStop(u16 n);
void m4aSongNumStart(u16);

View File

@ -97,6 +97,7 @@ void sub_0803E3B0(struct Object4 *);
void sub_0803E458(void);
void sub_0803E4D4(u8);
void sub_0803E558(u8);
void sub_0803FE74(struct Kirby *);
void sub_08044EA8(struct Kirby *);
void sub_08047EF0(struct Kirby *);
u8 sub_0804BAD8(struct Kirby *);

View File

@ -4,6 +4,23 @@
#include "global.h"
#include "main.h"
#define SpriteSomething(sprite, unk0Val, unkCVal, unk1AVal, unk1BVal, unk10Val, unk12Val, \
unk14Val, unk16Val, unk1CVal, unk1FVal, unk8Val) ({ \
(sprite)->unk0 = (unk0Val); \
(sprite)->unkC = (unkCVal); \
(sprite)->unk1A = (unk1AVal); \
(sprite)->unk1B = (unk1BVal); \
(sprite)->unk10 = (unk10Val); \
(sprite)->unk12 = (unk12Val); \
(sprite)->unk14 = (unk14Val); \
(sprite)->unk16 = (unk16Val); \
(sprite)->unk1C = (unk1CVal); \
(sprite)->unk1F = (unk1FVal); \
(sprite)->unk8 = (unk8Val); \
sub_08155128(sprite); \
sub_0803D280(0x10 * (sprite)->unk1F, 0x10); \
})
// TODO: move the struct declaration to a proper location
struct Unk_03002400 {
u32 filler0;

View File

@ -340,6 +340,7 @@ SECTIONS {
asm/wiz.o(.text);
asm/moley.o(.text);
asm/mega_titan.o(.text);
src/dark_meta_knight.o(.text);
asm/dark_meta_knight.o(.text);
src/dark_mind.o(.text);
asm/boss_challenge_door.o(.text);

786
src/dark_meta_knight.c Normal file
View File

@ -0,0 +1,786 @@
#include "dark_meta_knight.h"
#include "object.h"
#include "functions.h"
#include "kirby.h"
#include "save.h"
#include "constants/kirby.h"
void sub_080F5A6C(struct DarkMetaKnight *);
void sub_080F5DA0(struct DarkMetaKnight *);
void sub_080F6454(struct DarkMetaKnight *);
void sub_080F6544(struct DarkMetaKnight *);
void sub_080F6728(struct DarkMetaKnight *);
void sub_080F6824(struct DarkMetaKnight *);
void sub_080F6AEC(struct DarkMetaKnight *, u8);
void sub_080F6ED8(struct DarkMetaKnight *);
void sub_080F704C(struct DarkMetaKnight *);
void sub_080F714C(struct DarkMetaKnight *);
void sub_080F7B34(struct DarkMetaKnight *);
void sub_080F8490(struct DarkMetaKnight *);
void sub_080F8B70(struct DarkMetaKnight *);
void sub_080FA2EC(struct DarkMetaKnight *);
void sub_080FB1CC(struct DarkMetaKnight *);
void sub_080FB504(struct DarkMetaKnight *);
struct ObjectBase *sub_080FBFE8(struct DarkMetaKnight *);
struct Object4 *sub_080FC5F8(struct DarkMetaKnight *);
struct Object4 *sub_080FD8B4(struct DarkMetaKnight *);
void sub_080FFEF4(struct DarkMetaKnight *);
void sub_080FFF2C(struct DarkMetaKnight *);
void sub_080FFF60(struct DarkMetaKnight *);
extern const s32 gUnk_083571C0[][2];
extern const struct Unk_08357260 gUnk_0835719C[];
void *CreateDarkMetaKnight(struct Object *template, u8 a2)
{
struct Task *t = TaskCreate(ObjectMain, sizeof(struct DarkMetaKnight), 0x1000, TASK_USE_EWRAM, ObjectDestroy);
struct DarkMetaKnight *tmp, *dmk = TaskGetStructPtr(t, tmp), *dmk2 = dmk;
u16 unk65E;
InitObject(&dmk->obj2, template, a2);
dmk->obj2.base.unkC |= 1;
dmk->obj2.base.flags |= 0x2000000;
dmk->obj2.base.flags |= 0x200;
dmk->unkC0 = 0;
dmk->unkC1 = 0;
dmk->unkC2 = 0;
dmk->unkC3 = 0;
dmk->unkC4 = 0;
dmk->unkC5 = 0;
dmk->unkC6 = 0;
dmk->unkC7 = 0;
dmk->unkCA = 0;
dmk->unkC9 = 0;
dmk->unkC8 = 0;
dmk->unkCC = dmk->obj2.unk80;
dmk->unkB8 = NULL;
dmk->unkBC = NULL;
dmk->obj2.base.flags |= 1;
dmk->obj2.base.flags |= 0x40;
dmk->obj2.base.unk5C &= ~7;
dmk->obj2.base.unk5C |= 3;
dmk->obj2.base.unk5C |= 0x1080A0;
sub_0803E2B0(&dmk->obj2.base, -8, -8, 8, 6);
sub_0803E308(&dmk->obj2.base, -10, -6, 10, 6);
ObjectInitSprite(&dmk->obj2);
unk65E = gCurLevelInfo[dmk->obj2.base.unk56].unk65E;
sub_08002A44(unk65E, sub_08002A0C(unk65E), 0);
sub_08002A1C(unk65E, 0);
if (gKirbys[gUnk_0203AD3C].base.base.base.roomId == dmk->obj2.base.roomId && !(gUnk_0203AD20 & 4))
m4aSongNumStartOrChange(sub_08002A0C(unk65E));
dmk->obj2.unk9E = 0;
dmk->obj2.unk7C = sub_080FB504;
sub_080FFF60(dmk);
dmk2->unkB4 = sub_080FBFE8(dmk);
return dmk;
}
void sub_080F5974(struct DarkMetaKnight *dmk)
{
dmk->obj2.kirby3 = sub_0803D368(&dmk->obj2.base);
dmk->obj2.base.flags |= 4;
if (!(dmk->obj2.kirby3->base.base.base.unkC & 0x8000)
&& dmk->obj2.base.roomId == dmk->obj2.kirby3->base.base.base.roomId
&& sub_08039430(&dmk->obj2.kirby3->base.base, dmk->obj2.base.x, dmk->obj2.base.y, dmk->obj2.object->unk1A, dmk->obj2.object->unk1C, dmk->obj2.object->unk1E, dmk->obj2.object->unk20))
{
Macro_081003EC(&dmk->obj2, &dmk->obj2.kirby3->base.base.base);
if (dmk->obj2.object->subtype1)
sub_080F5A6C(dmk);
else
sub_080F704C(dmk);
}
}
void sub_080F5A6C(struct DarkMetaKnight *dmk)
{
struct Sprite sprite;
u8 i, j = 0;
struct DarkMetaKnight *dmk2 = dmk;
u32 *pointer;
for (i = 0; i < gUnk_0203AD44; ++i)
{
struct Kirby *kirby = gKirbys + i;
if (kirby->hp > 0 && kirby->base.base.base.roomId == dmk->obj2.base.roomId)
{
sub_0804BAD8(kirby);
if (kirby->ability != KIRBY_ABILITY_UFO)
kirby->unkD4 = 11;
else
kirby->unkD4 = 37;
kirby->base.base.base.xspeed = 0x100;
kirby->base.base.base.flags &= ~1;
kirby->base.base.base.x = gUnk_083571C0[j][0];
kirby->base.base.base.y = gUnk_083571C0[j][1];
++j;
gCurLevelInfo[kirby->base.base.base.unk56].unk1EC = 3;
gCurLevelInfo[kirby->base.base.base.unk56].unkC = gUnk_083571C0[0][0] - 0x6C00;
gCurLevelInfo[kirby->base.base.base.unk56].unk10 = gUnk_083571C0[0][1] - 0x8000;
}
}
gUnk_0203AD10 |= 0x80;
pointer = sub_08002888(1, 10 ,0);
if (*pointer)
sub_080F6AEC(dmk, 1);
else
{
*pointer = 1;
m4aSongNumStartOrChange(24);
ObjectSetFunc(dmk, 0x1F, sub_080F5DA0);
dmk->obj2.base.x = 0x1C000;
dmk->obj2.base.y = 0x119FF;
dmk->obj2.base.xspeed = 0;
dmk->obj2.base.yspeed = 0;
dmk->obj2.base.flags &= ~0x40;
dmk->obj2.unk9F = 0;
dmk->obj2.unk9E = 0;
if (gKirbys[gUnk_0203AD3C].base.base.base.roomId == dmk->obj2.base.roomId)
{
SpriteSomething(&sprite, 0x6000000, 0x394, 1, 0xFF, 0, 0, 0, 0, 0x10, dmk->obj2.base.unk10.unk1F & 0xF, 0x80000);
SpriteSomething(&sprite, 0x6000000, 0x394, 3, 0xFF, 0, 0, 0, 0, 0x10, dmk2->unkB4->unk10.unk1F & 0xF, 0x80000);
}
dmk->obj2.unk9F = 0x36;
}
}
void sub_080F5CD0(struct DarkMetaKnight *dmk)
{
if (!Macro_0810B1F4(&dmk->obj2.base))
{
if (dmk->unkC7)
{
if (!--dmk->unkC7)
sub_080F6AEC(dmk, 0);
}
else
{
u8 i;
struct Kirby *kirby;
struct Unk_02022930_0 *pointer;
for (i = 0; i < gUnk_0203AD44; ++i)
{
kirby = gKirbys + i;
if (kirby->hp > 0
&& kirby->base.base.base.roomId == dmk->obj2.base.roomId
&& kirby->unk11A & 8)
{
pointer = sub_0803C83C(5, dmk->obj2.base.roomId);
pointer->unk0 = 1;
pointer->unkA = 0x800;
pointer->unk2 = 0x20;
pointer->unk4 = 0xFFFF;
pointer->unk6 = 0x3FFF;
dmk->unkC7 = 8;
}
}
}
}
}
void sub_080F5DA0(struct DarkMetaKnight *dmk)
{
u8 i;
struct Kirby *kirby;
struct DarkMetaKnight *dmk2 = dmk;
if (dmk->obj2.unk9F) --dmk->obj2.unk9F;
for (i = 0; i < gUnk_0203AD44; ++i)
{
kirby = gKirbys + i;
if (kirby->hp > 0 && kirby->base.base.base.roomId == dmk->obj2.base.roomId)
{
if (!dmk->obj2.unk9F)
{
if (kirby->base.base.base.xspeed < 0x40)
{
kirby->unkD4 = 0;
kirby->base.base.base.xspeed = 0;
}
}
else
{
kirby->base.base.base.flags |= 4;
kirby->base.base.base.xspeed = 0x100;
}
if (dmk->obj2.unk9F < 0x18)
{
struct LevelInfo *li = &gCurLevelInfo[kirby->base.base.base.unk56];
li->unk662 += 0x18;
if (li->unk662 > 0x180) li->unk662 = 0x180;
li->unkC += li->unk662;
if (li->unkC > 0xF800) li->unkC = 0xF800;
}
}
}
switch (dmk->obj2.unk83)
{
case 0x1F:
dmk->obj2.base.flags |= 4;
if (++dmk->obj2.unk9E > 0xB4)
{
dmk->obj2.unk83 = 0x20;
dmk->obj2.base.flags &= ~2;
dmk->obj2.unk9E = 0;
}
if (dmk->obj2.unk9E == 0xC)
{
u32 *pointer = sub_08002888(2, 0x13, 0);
if (*pointer) dmk->obj2.unk7C = sub_080F5CD0;
*pointer = 1;
if (!(gUnk_0203AD10 & 0x10))
{
if (gUnk_0203AD10 & 2 && gUnk_0203AD3C != gUnk_0203AD24)
sub_08031CE4(8);
else
sub_0800ACD4(1, gUnk_0203AD48 > 2 ? 0 : gUnk_0203AD48);
}
}
break;
case 0x20:
if (dmk->obj2.base.unk1 == 0xE)
dmk2->unkBC = sub_080FC5F8(dmk);
if (dmk->obj2.base.unk1 == 0x2A)
{
dmk->obj2.unk83 = 2;
dmk->obj2.unk9E = 0;
dmk->obj2.base.xspeed = -0x80;
}
break;
case 2:
dmk->obj2.base.flags |= 4;
if (++dmk->obj2.unk9E > 0x40)
{
m4aSongNumStop(24);
dmk2->unkB8 = sub_080FD8B4(dmk);
dmk->obj2.unk9E = 0;
dmk->obj2.unk83 = 0;
dmk->obj2.unk9E = 0; // duh
dmk->obj2.base.xspeed = 0;
PlaySfx(&dmk->obj2.base, 535);
return;
}
break;
case 0:
if (++dmk->obj2.unk9E > 0x38)
{
sub_080FFEF4(dmk);
return;
}
break;
}
if (dmk->obj2.unk85 > 0x96)
{
if (gKirbys[gUnk_0203AD3C].base.base.base.roomId == dmk->obj2.base.roomId)
{
sub_0803CD98(dmk->obj2.base.unk10.unk1F, 0x394, 1, 0x390, 0, dmk->obj2.base.counter);
sub_0803CD98(dmk2->unkB4->unk10.unk1F, 0x394, 3, 0x391, 0, dmk->obj2.base.counter);
}
dmk->obj2.base.counter += 2;
if (dmk->obj2.base.counter > 0x100)
dmk->obj2.base.counter = 0x100;
}
else
++dmk->obj2.unk85;
}
void sub_080F6104(struct DarkMetaKnight *dmk)
{
u8 i;
for (i = 0; i < gUnk_0203AD44; ++i)
{
struct Kirby *kirby = gKirbys + i;
struct LevelInfo *li = gCurLevelInfo + kirby->base.base.base.unk56;
if (kirby->hp > 0 && kirby->base.base.base.roomId == dmk->obj2.base.roomId)
{
li->unk662 += 0x80;
li->unk664 += 0x80;
if (li->unk662 > 0x500) li->unk662 = 0x500;
if (li->unk664 > 0x400) li->unk664 = 0x400;
li->unkC -= li->unk662;
li->unk10 -= li->unk664;
if (li->unkC < 0x4800) li->unkC = 0x4800;
if (li->unk10 < 0x800) li->unk10 = 0x800;
if (!dmk->obj2.unk85 && li->unk10 < 0x6000)
{
dmk->obj2.unk85 = 1;
dmk->obj2.unk83 = 0x28;
dmk->obj2.base.x = 0x6000;
dmk->obj2.base.y = 0x4000;
dmk->obj2.base.flags ^= 1;
return;
}
}
}
switch (dmk->obj2.unk85)
{
case 1:
if (!--dmk->obj2.base.counter)
{
dmk->obj2.unk83 = 0x29;
dmk->obj2.unk85 = 2;
dmk->obj2.base.counter = 8;
PlaySfx(&dmk->obj2.base, 452);
}
break;
case 2:
if (dmk->obj2.base.flags & 2
&& !--dmk->obj2.base.counter)
sub_080FFF2C(dmk);
break;
}
}
void sub_080F6300(struct DarkMetaKnight *dmk)
{
u8 i;
bool32 sp = TRUE;
for (i = 0; i < gUnk_0203AD44; ++i)
{
struct Kirby *kirby = gKirbys + i;
struct LevelInfo *li = gCurLevelInfo + kirby->base.base.base.unk56;
if (kirby->hp > 0 && kirby->base.base.base.roomId == dmk->obj2.base.roomId)
{
li->unk662 += 0x100;
li->unk664 += 0x100;
if (li->unk662 > 0xA00) li->unk662 = 0xA00;
if (li->unk664 > 0x800) li->unk664 = 0x800;
li->unkC += li->unk662;
li->unk10 += li->unk664;
if (li->unkC >= 0xF800)
li->unkC = 0xF800;
else
sp = FALSE;
if (li->unk10 >= 0x9800)
li->unk10 = 0x9800;
else
sp = FALSE;
if (!dmk->obj2.unk85 && li->unk10 > 0x4A00)
{
dmk->obj2.unk85 = 1;
dmk->obj2.unk83 = 0;
dmk->obj2.base.flags ^= 1;
dmk->obj2.base.x = 0x1B300;
dmk->obj2.base.y = 0x119FF;
return;
}
}
}
if (sp) sub_080F6454(dmk);
}
void sub_080F6454(struct DarkMetaKnight *dmk)
{
u8 i;
ObjectSetFunc(dmk, 0, sub_080F6544);
dmk->obj2.base.xspeed = 0;
dmk->obj2.base.yspeed = 0;
dmk->obj2.base.flags &= ~0x40;
dmk->obj2.base.counter = 0;
dmk->obj2.unk9E = 0;
dmk->obj2.unk9F = 0x38;
dmk->obj2.unk85 = 0;
dmk->obj2.base.x = 0x1B300;
dmk->obj2.base.y = 0x119FF;
for (i = 0; i < gUnk_0203AD44; ++i)
{
struct Kirby *kirby = gKirbys + i;
struct LevelInfo *li = gCurLevelInfo + kirby->base.base.base.unk56;
if (kirby->hp > 0 && kirby->base.base.base.roomId == dmk->obj2.base.roomId)
{
li->unk662 = 0;
li->unk664 = 0;
li->unkC = 0xF800;
li->unk10 = 0x9800;
}
}
m4aMPlayFadeIn(&gUnk_030016A0, 8);
}
void sub_080F6544(struct DarkMetaKnight *dmk)
{
struct DarkMetaKnight *dmk2 = dmk;
switch (dmk->obj2.unk85)
{
case 0:
if (!--dmk->obj2.unk9F)
{
dmk->obj2.unk85 = 1;
dmk->obj2.unk83 = 0xB;
dmk->obj2.base.xspeed = 0xA0;
dmk->obj2.base.yspeed = 0x280;
}
break;
case 1:
if (dmk->obj2.base.yspeed < 0x40)
{
dmk->obj2.unk83 = 0xC;
dmk->obj2.base.flags &= ~2;
dmk->obj2.unk85 = 2;
}
break;
case 2:
if (dmk->obj2.base.flags & 2)
{
dmk->obj2.unk83 = 0xD;
dmk->obj2.unk85 = 3;
}
break;
case 3:
if (dmk->obj2.base.unk62 & 4)
{
if (dmk->obj2.unk83 == 0xD)
{
PlaySfx(&dmk->obj2.base, 536);
dmk->obj2.unk83 = 0xE;
}
else if (dmk->obj2.unk83 == 0xE)
{
if (++dmk->obj2.unk9E > 0x10)
dmk->obj2.unk83 = 0;
}
dmk->obj2.base.xspeed = 0;
if (gKirbys[gUnk_0203AD3C].base.base.base.roomId == dmk->obj2.base.roomId)
{
sub_0803CD98(dmk->obj2.base.unk10.unk1F, 0x390, 0, 0x394, 0, dmk->obj2.base.counter);
sub_0803CD98(dmk2->unkB4->unk10.unk1F, 0x391, 0, 0x394, 2, dmk->obj2.base.counter);
}
dmk->obj2.base.counter += 2;
if (dmk->obj2.base.counter > 0x100)
{
dmk->obj2.base.counter = 0x100;
sub_080F6728(dmk);
}
}
break;
}
}
void sub_080F6728(struct DarkMetaKnight *dmk)
{
struct Sprite sprite;
ObjectSetFunc(dmk, 0, sub_080F6824);
dmk->obj2.base.xspeed = 0;
dmk->obj2.base.yspeed = 0;
dmk->obj2.base.counter = 0x20;
dmk->obj2.unk85 = 0;
if (gKirbys[gUnk_0203AD3C].base.base.base.roomId == dmk->obj2.base.roomId)
{
SpriteSomething(&sprite, 0x6000000, 0x394, 0, 0xFF, 0, 0, 0, 0, 0x10, dmk->obj2.base.unk10.unk1F & 0xF, 0x80000);
SpriteSomething(&sprite, 0x6000000, 0x394, 2, 0xFF, 0, 0, 0, 0, 0x10, dmk->unkB4->unk10.unk1F & 0xF, 0x80000);
}
}
void sub_080F6824(struct DarkMetaKnight *dmk)
{
switch (dmk->obj2.unk85)
{
case 0:
if (!--dmk->obj2.base.counter)
{
dmk->obj2.base.flags &= ~2;
dmk->obj2.unk83 = 0x17;
dmk->obj2.unk85 = 1;
}
break;
case 1:
if (dmk->obj2.base.unk1 == 8 || dmk->obj2.base.unk1 == 0x16)
{
sub_080860A8(&dmk->obj2.base, gUnk_0835719C);
PlaySfx(&dmk->obj2.base, 420);
}
if (dmk->obj2.base.flags & 2)
{
dmk->obj2.unk85 = 3;
dmk->obj2.base.counter = 4;
}
break;
case 3:
if (!--dmk->obj2.base.counter)
{
dmk->obj2.unk85 = 4;
dmk->obj2.unk9E = 2;
dmk->obj2.base.xspeed = 0; // duh
dmk->obj2.base.flags &= ~2;
dmk->obj2.unk83 = 0xB;
dmk->obj2.base.xspeed = -0x100;
dmk->obj2.base.yspeed = 0x300;
}
break;
case 4:
if (dmk->obj2.unk83 == 0xB)
{
if (dmk->obj2.base.yspeed < 0x40)
{
dmk->obj2.unk83 = 0x10;
dmk->obj2.base.flags &= ~2;
PlaySfx(&dmk->obj2.base, 534);
}
}
else if (dmk->obj2.unk83 == 0x10)
{
if (!--dmk->obj2.unk9E)
{
dmk->obj2.unk83 = 0x11;
dmk->obj2.base.yspeed = -0x200;
dmk->obj2.base.xspeed = 0;
dmk->obj2.unk7C = sub_080FB504;
}
}
else if (dmk->obj2.unk83 == 0x11)
{
dmk->obj2.base.yspeed -= 0x66;
if (dmk->obj2.base.yspeed < -0x900)
dmk->obj2.base.yspeed = -0x900;
if (dmk->obj2.base.unk62 & 4)
{
struct Unk_02022930_0 *pointer;
dmk->obj2.base.counter = 8;
dmk->obj2.unk83 = 0x12;
sub_0808AE30(&dmk->obj2.base, 0, 0x2AD, 2);
sub_0806FE64(1, &dmk->obj2.base);
pointer = sub_0803C83C(5, dmk->obj2.base.roomId);
pointer->unk0 = 1;
pointer->unkA = 0x800;
pointer->unk2 = 0x20;
pointer->unk4 = 0xFFFF;
pointer->unk6 = 0x3FFF;
}
}
else
{
if (!--dmk->obj2.base.counter)
sub_080F6AEC(dmk, 0);
}
break;
}
}
void sub_080F6AEC(struct DarkMetaKnight *dmk, u8 a2)
{
struct Sprite sprite;
u8 i, j = 0;
ObjectSetFunc(dmk, 0, sub_080F6ED8);
dmk->obj2.unk85 = 0;
dmk->obj2.unk7C = sub_080FB504;
if (dmk->unkB8) dmk->unkB8->flags |= 0x1000;
if (dmk->unkBC) dmk->unkBC->flags |= 0x1000;
if (gKirbys[gUnk_0203AD3C].base.base.base.roomId == dmk->obj2.base.roomId)
{
SpriteSomething(&sprite, 0x6000000, 0x394, 0, 0xFF, 0, 0, 0, 0, 0x10, dmk->obj2.base.unk10.unk1F & 0xF, 0x80000);
SpriteSomething(&sprite, 0x6000000, 0x394, 2, 0xFF, 0, 0, 0, 0, 0x10, dmk->unkB4->unk10.unk1F & 0xF, 0x80000);
}
dmk->obj2.base.flags |= 1;
dmk->obj2.base.flags &= ~8;
dmk->obj2.base.xspeed = 0;
dmk->obj2.base.yspeed = 0;
dmk->obj2.base.x = 0x1B300;
dmk->obj2.base.y = 0x119FF;
dmk->obj2.base.counter = 0x40;
Macro_08100F18(&dmk->obj2);
if (!a2)
{
struct Unk_02022930_0 *pointer = sub_0803C83C(5, dmk->obj2.base.roomId);
pointer->unk0 = 1;
pointer->unkA = 0xF800;
pointer->unkC = 0x2000;
pointer->unk1 = 0x20;
pointer->unk2 = 0;
pointer->unk4 = 0xFFFF;
pointer->unk6 = 0x3FFF;
}
for (i = 0; i < gUnk_0203AD44; ++i)
{
struct Kirby *kirby = gKirbys + i;
if (kirby->hp > 0 && kirby->base.base.base.roomId == dmk->obj2.base.roomId)
{
kirby->unkD4 = 0;
kirby->base.base.base.xspeed = 0;
kirby->base.base.base.yspeed = 0;
kirby->base.base.base.x = gUnk_083571C0[j][0] + 0x3B00;
kirby->base.base.base.y = gUnk_083571C0[j][1];
++j;
gCurLevelInfo[kirby->base.base.base.unk56].unkC = 0xF800;
gCurLevelInfo[kirby->base.base.base.unk56].unk10 = 0x9800;
}
}
CreateObjTemplateAndObj(dmk->obj2.base.unk56, 1, 0x24, dmk->obj2.base.x >> 8, dmk->obj2.base.y >> 8, 0, 0x1F, 0, 0, OBJ_SCROLL_LOCK,
0, 0, 0, 0x16, -500, -200, 1000, 400, 0, 0xF0A, 0xF09, 0, 0);
}
void sub_080F6ED8(struct DarkMetaKnight *dmk)
{
u8 i;
if (!--dmk->obj2.base.counter)
{
dmk->obj2.unkA4 = gCurLevelInfo[dmk->obj2.kirby3->base.base.base.unk56].unk6C >> 8;
dmk->obj2.unkA6 = gCurLevelInfo[dmk->obj2.kirby3->base.base.base.unk56].unk70 >> 8;
dmk->obj2.unkA8 = gCurLevelInfo[dmk->obj2.kirby3->base.base.base.unk56].unk74 >> 8;
dmk->obj2.unkAA = gCurLevelInfo[dmk->obj2.kirby3->base.base.base.unk56].unk78 >> 8;
dmk->obj2.base.flags &= ~0x200;
dmk->obj2.base.flags &= ~0x40;
sub_080F7B34(dmk);
gUnk_0203AD10 &= ~0x80;
for (i = 0; i < gUnk_0203AD44; ++i)
{
struct Kirby *kirby = gKirbys + i;
if (kirby->hp > 0 && kirby->base.base.base.roomId == dmk->obj2.base.roomId)
{
kirby->base.base.base.flags &= ~0x1000000;
if (kirby->ability == KIRBY_ABILITY_SLEEP)
sub_080641FC(kirby);
else if (kirby->ability == KIRBY_ABILITY_UFO)
sub_0806A798(kirby);
else if (kirby->ability == KIRBY_ABILITY_CUPID)
{
if (kirby->base.base.base.flags & 0x40)
sub_08047EF0(kirby);
else if (kirby->base.base.base.flags & 0x60)
sub_08044EA8(kirby);
else
sub_0803FE74(kirby);
}
else if (kirby->base.base.base.unk58 & 2)
sub_08059810(kirby);
else if (kirby->base.base.base.flags & 0x60)
sub_08044EA8(kirby);
else
sub_0803FE74(kirby);
}
}
}
}
void sub_080F704C(struct DarkMetaKnight *dmk)
{
struct Sprite sprite;
ObjectSetFunc(dmk, 0x1F, sub_080F714C);
dmk->obj2.base.xspeed = 0;
dmk->obj2.base.yspeed = 0;
dmk->obj2.unk9E = 0;
dmk->obj2.unk9F = 0;
if (gKirbys[gUnk_0203AD3C].base.base.base.roomId == dmk->obj2.base.roomId)
{
SpriteSomething(&sprite, 0x6000000, 0x394, 1, 0xFF, 0, 0, 0, 0, 0x10, dmk->obj2.base.unk10.unk1F & 0xF, 0x80000);
SpriteSomething(&sprite, 0x6000000, 0x394, 3, 0xFF, 0, 0, 0, 0, 0x10, dmk->unkB4->unk10.unk1F & 0xF, 0x80000);
}
}
void sub_080F714C(struct DarkMetaKnight *dmk)
{
struct DarkMetaKnight *dmk2 = dmk;
switch (dmk->obj2.unk83)
{
case 0x1F:
dmk->obj2.base.flags |= 4;
if (++dmk->obj2.unk9E > 0x5A)
{
dmk->obj2.unk83 = 0x20;
dmk->obj2.base.flags &= ~2;
dmk->obj2.unk9E = 0;
}
break;
case 0x20:
if (dmk->obj2.base.unk1 == 0xE)
sub_080FC5F8(dmk);
if (dmk->obj2.base.flags & 2)
{
dmk->obj2.unk83 = 0x21;
dmk->obj2.unk9E = 0;
Macro_08100F18(&dmk->obj2);
}
break;
case 0x21:
dmk->obj2.base.flags |= 4;
if (++dmk->obj2.unk9E > 0x5A)
{
dmk->obj2.base.flags &= ~0x200;
dmk->obj2.base.flags &= ~0x40;
sub_080F7B34(dmk);
return;
}
break;
}
if (dmk->obj2.unk9F > 0x3C)
{
if (gKirbys[gUnk_0203AD3C].base.base.base.roomId == dmk->obj2.base.roomId)
{
sub_0803CD98(dmk->obj2.base.unk10.unk1F, 0x394, 1, 0x390, 0, dmk->obj2.base.counter);
sub_0803CD98(dmk2->unkB4->unk10.unk1F, 0x394, 3, 0x391, 0, dmk->obj2.base.counter);
}
dmk->obj2.base.counter += 2;
if (dmk->obj2.base.counter > 0x100)
dmk->obj2.base.counter = 0x100;
}
else
++dmk->obj2.unk9F;
}
void sub_080F738C(struct DarkMetaKnight *dmk)
{
struct DarkMetaKnight *dmk2 = dmk;
s8 r3;
u8 r5 = 0, r1, r2;
if (dmk->obj2.base.unk62 & 4)
{
r3 = Rand16() & 7;
if (dmk->obj2.object->subtype1 && dmk2->unkC9)
{
if (dmk->obj2.unk80 < gUnk_08351530[0x10][gUnk_0203AD30 - 1] >> 1)
{
r1 = 1;
r5 = 2;
}
else
{
r1 = 3;
r5 = 1;
}
r2 = 1;
}
else
{
if (dmk->obj2.unk80 < gUnk_08351530[0x10][gUnk_0203AD30 - 1] >> 1)
{
r1 = 3;
r2 = 1;
}
else
{
r1 = 4;
r2 = 1;
}
}
if ((r3 -= r2) < 0)
sub_080FB1CC(dmk);
else if ((r3 -= r1) < 0)
{
dmk2->unkC4 = 1;
sub_080F8490(dmk);
}
else if ((r3 -= r5) < 0)
sub_080FA2EC(dmk);
else if ((r3 -= r2) < 0)
sub_080F8B70(dmk);
}
}

View File

@ -1678,19 +1678,7 @@ void sub_081027C0(struct DarkMindForm1 *r5)
}
else
{
sprite.unk0 = 0x6000000;
sprite.unkC = 920;
sprite.unk1A = 0;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 16;
sprite.unk1F = r5->unk0.base.unk10.unk1F & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(sprite.unk1F << 4, 0x10);
SpriteSomething(&sprite, 0x6000000, 0x398, 0, 0xFF, 0, 0, 0, 0, 0x10, r5->unk0.base.unk10.unk1F & 0xF, 0x80000);
r5->unk0.base.flags &= ~0x200;
r5->unk0.base.flags &= ~0x400;
r5->unk0.base.flags &= ~8;

View File

@ -33,7 +33,6 @@ void sub_0803F46C(struct Kirby *);
void sub_0803F790(struct Kirby *);
void sub_0803FBB4(struct Kirby *);
void nullsub_120(struct Task *);
void sub_0803FE74(struct Kirby *);
void sub_0803FF64(struct Kirby *);
void sub_08040868(struct Kirby *);
void sub_08040930(struct Kirby *);
@ -792,19 +791,7 @@ u8 sub_0803DFAC(u16 r2, u8 r6)
++gUnk_02022EA0;
if (gUnk_02022EA0 >= 7) gUnk_02022EA0 = 7;
r4 = gUnk_02022EA0 + 7;
sprite.unk0 = 0x6000000;
sprite.unkC = r2 & 0xFFF;
sprite.unk1A = r6;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = r4 & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F, 0x10);
SpriteSomething(&sprite, 0x6000000, r2 & 0xFFF, r6, 0xFF, 0, 0, 0, 0, 0x10, r4 & 0xF, 0x80000);
sub_0803D280(0x10 * r4, 0x10);
return r4;
}
@ -818,48 +805,10 @@ void sub_0803E050(u16 sl)
{
if (!(gKirbys[i].base.base.base.unkC & 0x200)
&& (sub_0806EFF8(&gKirbys[i]), (gKirbys[i].ability == KIRBY_ABILITY_NORMAL && gKirbys[i].unkE0)))
{
sprite.unk0 = 0x6000000;
sprite.unkC = gUnk_0834C5D0[gKirbys[i].unkE0 & 3];
sprite.unk1A = gKirbys[i].unkE0 / 4;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = (i+4) & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F, 0x10);
}
SpriteSomething(&sprite, 0x6000000, gUnk_0834C5D0[gKirbys[i].unkE0 & 3], gKirbys[i].unkE0 / 4, 0xFF, 0, 0, 0, 0, 0x10, (i+4) & 0xF, 0x80000);
}
sprite.unk0 = 0x6000000;
sprite.unkC = 0x17;
sprite.unk1A = 0;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = 0xE;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F, 0x10);
sprite.unk0 = 0x6000000;
sprite.unkC = 0x28A;
sprite.unk1A = 0;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F, 0x10);
SpriteSomething(&sprite, 0x6000000, 0x17, 0, 0xFF, 0, 0, 0, 0, 0x10, 0xE, 0x80000);
SpriteSomething(&sprite, 0x6000000, 0x28A, 0, 0xFF, 0, 0, 0, 0, 0x10, 0xF, 0x80000);
sub_0803D280(0xE0, 0x10);
sub_0803D280(0xF0, 0x10);
gUnk_02022EA0 = 0;
@ -1134,37 +1083,9 @@ void sub_0803E868(u8 r4)
struct Sprite sprite;
if (gKirbys[r4].ability == KIRBY_ABILITY_UFO)
{
sprite.unk0 = 0x6000000;
sprite.unkC = 0x1A0;
sprite.unk1A = 0xE;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = r4 & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F, 0x10);
}
SpriteSomething(&sprite, 0x6000000, 0x1A0, 0xE, 0xFF, 0, 0, 0, 0, 0x10, r4 & 0xF, 0x80000);
else
{
sprite.unk0 = 0x6000000;
sprite.unkC = 0x15;
sprite.unk1A = 0xE;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = r4 & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F, 0x10);
}
SpriteSomething(&sprite, 0x6000000, 0x15, 0xE, 0xFF, 0, 0, 0, 0, 0x10, r4 & 0xF, 0x80000);
}
struct Kirby2
@ -3970,19 +3891,7 @@ void sub_0804A1A0(struct Kirby *kirby)
struct Sprite sprite;
kirby->base.base.base.unkC |= 0x200;
sprite.unk0 = 0x6000000;
sprite.unkC = 36;
sprite.unk1A = 0;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = kirby->base.base.base.unk10.unk1F & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F, 0x10);
SpriteSomething(&sprite, 0x6000000, 0x24, 0, 0xFF, 0, 0, 0, 0, 0x10, kirby->base.base.base.unk10.unk1F & 0xF, 0x80000);
kirby->base.base.unk78 = sub_0804CAF0;
kirby->unkD4 = 123;
sub_0808D5E0(&kirby->base.base.base);
@ -3997,19 +3906,7 @@ void sub_0804A328(struct Kirby *kirby)
struct Sprite sprite;
kirby->base.base.base.unkC |= 0x200;
sprite.unk0 = 0x6000000;
sprite.unkC = 38;
sprite.unk1A = 0;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = kirby->base.base.base.unk10.unk1F & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F, 0x10);
SpriteSomething(&sprite, 0x6000000, 0x26, 0, 0xFF, 0, 0, 0, 0, 0x10, kirby->base.base.base.unk10.unk1F & 0xF, 0x80000);
kirby->base.base.unk78 = sub_0804CAF0;
kirby->unkD4 = 135;
sub_0808E2EC(&kirby->base.base.base);
@ -4024,19 +3921,7 @@ void sub_0804A4CC(struct Kirby *kirby)
struct Sprite sprite;
kirby->base.base.base.unkC |= 0x200;
sprite.unk0 = 0x6000000;
sprite.unkC = 40;
sprite.unk1A = 0;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = kirby->base.base.base.unk10.unk1F & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F, 0x10);
SpriteSomething(&sprite, 0x6000000, 0x28, 0, 0xFF, 0, 0, 0, 0, 0x10, kirby->base.base.base.unk10.unk1F & 0xF, 0x80000);
kirby->base.base.unk78 = sub_0804D2DC;
kirby->unkD4 = 129;
if (kirby->base.base.base.flags & 0x80)
@ -4684,19 +4569,7 @@ void sub_0804CAF0(struct Kirby *kirby)
if (kirby->base.base.base.yspeed <= 0 && kirby->base.base.base.unk62 & 4)
{
kirby->base.base.base.unkC |= 0x200;
sprite.unk0 = 0x6000000;
sprite.unkC = 36;
sprite.unk1A = 0;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = kirby->base.base.base.unk10.unk1F & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F, 0x10);
SpriteSomething(&sprite, 0x6000000, 0x24, 0, 0xFF, 0, 0, 0, 0, 0x10, kirby->base.base.base.unk10.unk1F & 0xF, 0x80000);
sub_0808E024(&kirby->base.base.base);
if (kirby->unkD4 == 123)
sub_0808DC80(&kirby->base.base.base);
@ -10453,19 +10326,7 @@ void sub_0805C700(struct Kirby *kirby)
if (kirby->base.base.base.counter == 3 && kirby->ability == KIRBY_ABILITY_BURNING)
{
kirby->base.base.base.unkC |= 0x200;
sprite.unk0 = 0x6000000;
sprite.unkC = 0x161;
sprite.unk1A = 0;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = kirby->base.base.base.unk10.unk1F & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F & 0xFF, 0x10);
SpriteSomething(&sprite, 0x6000000, 0x161, 0, 0xFF, 0, 0, 0, 0, 0x10, kirby->base.base.base.unk10.unk1F & 0xF, 0x80000);
}
}
else
@ -11094,19 +10955,7 @@ void sub_0805DC70(struct Kirby *kirby)
if (kirby->base.base.base.flags & 2)
{
kirby->base.base.base.unkC |= 0x200;
sprite.unk0 = 0x6000000;
sprite.unkC = 0x161;
sprite.unk1A = 0;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = kirby->base.base.base.unk10.unk1F & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F & 0xFF, 0x10);
SpriteSomething(&sprite, 0x6000000, 0x161, 0, 0xFF, 0, 0, 0, 0, 0x10, kirby->base.base.base.unk10.unk1F & 0xF, 0x80000);
kirby->base.base.base.flags &= ~2;
kirby->unkD4 = 52;
kirby->base.base.unk78 = sub_0805DE18;
@ -11189,54 +11038,18 @@ void sub_0805DE18(struct Kirby *kirby)
case 11:
case 22:
kirby->base.base.base.unkC |= 0x200;
sprite.unk0 = 0x6000000;
sprite.unkC = 0x161;
sprite.unk1A = 0;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = kirby->base.base.base.unk10.unk1F & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F & 0xFF, 0x10);
SpriteSomething(&sprite, 0x6000000, 0x161, 0, 0xFF, 0, 0, 0, 0, 0x10, kirby->base.base.base.unk10.unk1F & 0xF, 0x80000);
break;
case 4:
case 15:
case 24:
kirby->base.base.base.unkC |= 0x200;
sprite.unk0 = 0x6000000;
sprite.unkC = 0x161;
sprite.unk1A = 1;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = kirby->base.base.base.unk10.unk1F & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F & 0xFF, 0x10);
SpriteSomething(&sprite, 0x6000000, 0x161, 1, 0xFF, 0, 0, 0, 0, 0x10, kirby->base.base.base.unk10.unk1F & 0xF, 0x80000);
break;
case 6:
case 17:
kirby->base.base.base.unkC |= 0x200;
sprite.unk0 = 0x6000000;
sprite.unkC = 0x161;
sprite.unk1A = 2;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = kirby->base.base.base.unk10.unk1F & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F & 0xFF, 0x10);
SpriteSomething(&sprite, 0x6000000, 0x161, 2, 0xFF, 0, 0, 0, 0, 0x10, kirby->base.base.base.unk10.unk1F & 0xF, 0x80000);
break;
}
r3 = kirby->base.base.base.y - kirby->base.base.base.unk4C;
@ -15441,19 +15254,7 @@ void sub_08067458(struct Kirby *kirby)
kirby->base.base.base.flags |= 0x200;
kirby->base.base.unk78 = sub_08067520;
kirby->base.base.base.unkC |= 0x200;
sprite.unk0 = 0x6000000;
sprite.unkC = 0x231;
sprite.unk1A = 0;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = kirby->base.base.base.unk10.unk1F & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F, 0x10);
SpriteSomething(&sprite, 0x6000000, 0x231, 0, 0xFF, 0, 0, 0, 0, 0x10, kirby->base.base.base.unk10.unk1F & 0xF, 0x80000);
}
}
@ -16352,19 +16153,7 @@ void sub_08069014(struct Kirby *kirby)
u8 i;
struct Sprite sprite;
sprite.unk0 = 0x6000000;
sprite.unkC = 0x209;
sprite.unk1A = 0;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = (kirby->base.base.base.unk56 + 4) & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F & 0xFF, 0x10);
SpriteSomething(&sprite, 0x6000000, 0x209, 0, 0xFF, 0, 0, 0, 0, 0x10, (kirby->base.base.base.unk56 + 4) & 0xF, 0x80000);
kirby->base.base.base.unkC |= 0x200;
sub_080838DC(kirby, kirby);
for (i = 0; i < gUnk_0203AD44; ++i)
@ -16436,19 +16225,7 @@ void sub_08069270(struct Kirby *kirby)
kirby->base.base.unk78 = sub_080606A0;
sub_08093390(kirby, -0x18, 0);
sub_08080E9C(kirby);
sprite.unk0 = 0x6000000;
sprite.unkC = 0x285;
sprite.unk1A = 0;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = (kirby->base.base.base.unk10.unk1F + 4) & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F & 0xFF, 0x10);
SpriteSomething(&sprite, 0x6000000, 0x285, 0, 0xFF, 0, 0, 0, 0, 0x10, (kirby->base.base.base.unk10.unk1F + 4) & 0xF, 0x80000);
}
else if (kirby->base.base.base.flags & 0x20)
{
@ -16462,19 +16239,7 @@ void sub_08069270(struct Kirby *kirby)
kirby->unkD4 = 113;
sub_080806FC(kirby);
PlaySfx(&kirby->base.base.base, 185);
sprite.unk0 = 0x6000000;
sprite.unkC = 0x287;
sprite.unk1A = 0;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = (kirby->base.base.base.unk10.unk1F + 4) & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F & 0xFF, 0x10);
SpriteSomething(&sprite, 0x6000000, 0x287, 0, 0xFF, 0, 0, 0, 0, 0x10, (kirby->base.base.base.unk10.unk1F + 4) & 0xF, 0x80000);
}
else
{
@ -16489,38 +16254,14 @@ void sub_08069270(struct Kirby *kirby)
kirby->unkD4 = 103;
sub_080806FC(kirby);
PlaySfx(&kirby->base.base.base, 185);
sprite.unk0 = 0x6000000;
sprite.unkC = 0x287;
sprite.unk1A = 0;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = (kirby->base.base.base.unk10.unk1F + 4) & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F & 0xFF, 0x10);
SpriteSomething(&sprite, 0x6000000, 0x287, 0, 0xFF, 0, 0, 0, 0, 0x10, (kirby->base.base.base.unk10.unk1F + 4) & 0xF, 0x80000);
}
else if (kirby->unk118 & 0x80)
sub_0805E304(kirby);
else
{
sub_080694EC(kirby);
sprite.unk0 = 0x6000000;
sprite.unkC = 0x1FA;
sprite.unk1A = 0;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = (kirby->base.base.base.unk10.unk1F + 4) & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F & 0xFF, 0x10);
SpriteSomething(&sprite, 0x6000000, 0x1FA, 0, 0xFF, 0, 0, 0, 0, 0x10, (kirby->base.base.base.unk10.unk1F + 4) & 0xF, 0x80000);
}
kirby->base.base.base.flags &= ~2;
}
@ -18948,114 +18689,26 @@ void sub_0806EFF8(struct Kirby *kirby)
if (gUnk_08D60FDC[kirby->ability])
{
if (kirby->ability == KIRBY_ABILITY_COOK || kirby->ability == KIRBY_ABILITY_MAGIC)
{
sprite.unk0 = 0x6000000;
sprite.unkC = gUnk_08D60FDC[kirby->ability][0x34].unk0;
sprite.unk1A = 0;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = (kirby->base.base.base.unk56 + 4) & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F, 0x10);
}
SpriteSomething(&sprite, 0x6000000, gUnk_08D60FDC[kirby->ability][0x34].unk0, 0, 0xFF, 0, 0, 0, 0, 0x10, (kirby->base.base.base.unk56 + 4) & 0xF, 0x80000);
else
{
sprite.unk0 = 0x6000000;
sprite.unkC = gUnk_08D60FDC[kirby->ability][0].unk0;
sprite.unk1A = 0;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = (kirby->base.base.base.unk56 + 4) & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F, 0x10);
}
SpriteSomething(&sprite, 0x6000000, gUnk_08D60FDC[kirby->ability][0].unk0, 0, 0xFF, 0, 0, 0, 0, 0x10, (kirby->base.base.base.unk56 + 4) & 0xF, 0x80000);
}
switch (kirby->ability)
{
case KIRBY_ABILITY_HAMMER:
sprite.unk0 = 0x6000000;
sprite.unkC = gUnk_083502C0[0].unk0;
sprite.unk1A = 0;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = (kirby->base.base.base.unk56 + 4) & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F, 0x10);
SpriteSomething(&sprite, 0x6000000, gUnk_083502C0[0].unk0, 0, 0xFF, 0, 0, 0, 0, 0x10, (kirby->base.base.base.unk56 + 4) & 0xF, 0x80000);
break;
case KIRBY_ABILITY_FIGHTER:
sprite.unk0 = 0x6000000;
sprite.unkC = 0x1FA;
sprite.unk1A = 0;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = (kirby->base.base.base.unk56 + 4) & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F, 0x10);
SpriteSomething(&sprite, 0x6000000, 0x1FA, 0, 0xFF, 0, 0, 0, 0, 0x10, (kirby->base.base.base.unk56 + 4) & 0xF, 0x80000);
break;
case KIRBY_ABILITY_PARASOL:
sprite.unk0 = 0x6000000;
sprite.unkC = gUnk_08350474[0].unk0;
sprite.unk1A = 0;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = (kirby->base.base.base.unk56 + 4) & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F, 0x10);
SpriteSomething(&sprite, 0x6000000, gUnk_08350474[0].unk0, 0, 0xFF, 0, 0, 0, 0, 0x10, (kirby->base.base.base.unk56 + 4) & 0xF, 0x80000);
break;
case KIRBY_ABILITY_CUPID:
sprite.unk0 = 0x6000000;
sprite.unkC = 0x219;
sprite.unk1A = 0;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = (kirby->base.base.base.unk56 + 4) & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F, 0x10);
SpriteSomething(&sprite, 0x6000000, 0x219, 0, 0xFF, 0, 0, 0, 0, 0x10, (kirby->base.base.base.unk56 + 4) & 0xF, 0x80000);
break;
case KIRBY_ABILITY_MASTER:
sprite.unk0 = 0x6000000;
sprite.unkC = 0x234;
sprite.unk1A = 0;
sprite.unk1B = 0xFF;
sprite.unk10 = 0;
sprite.unk12 = 0;
sprite.unk14 = 0;
sprite.unk16 = 0;
sprite.unk1C = 0x10;
sprite.unk1F = (kirby->base.base.base.unk56 + 4) & 0xF;
sprite.unk8 = 0x80000;
sub_08155128(&sprite);
sub_0803D280(0x10 * sprite.unk1F, 0x10);
SpriteSomething(&sprite, 0x6000000, 0x234, 0, 0xFF, 0, 0, 0, 0, 0x10, (kirby->base.base.base.unk56 + 4) & 0xF, 0x80000);
break;
}
sub_0803E558(kirby->base.base.base.unk56);