mirror of https://github.com/zeldaret/tmc.git
189 lines
6.9 KiB
C
189 lines
6.9 KiB
C
#include "entity.h"
|
|
#include "player.h"
|
|
#include "coord.h"
|
|
|
|
extern const u8 DarkNutSwordSlash_hitTypes[];
|
|
extern void (*const DarkNutSwordSlash_UpdatesForType[])(Entity*);
|
|
extern Hitbox const* const* const gUnk_081293E0[];
|
|
extern const Hitbox* const gUnk_081293F0[];
|
|
extern const Hitbox* const gUnk_08129400[];
|
|
extern const Hitbox* const gUnk_08129410[];
|
|
extern const Hitbox* const gUnk_08129420[];
|
|
|
|
void DarkNutSwordSlash_Init(Entity*);
|
|
void DarkNutSwordSlash_OnTick(Entity*);
|
|
|
|
void DarkNutSwordSlash(Entity* this) {
|
|
if (this->action == 0) {
|
|
this->action = 1;
|
|
DarkNutSwordSlash_Init(this);
|
|
if (this->type == 3) {
|
|
InitAnimationForceUpdate(this, this->parent->animationState + 0x18);
|
|
}
|
|
}
|
|
if ((this->parent == NULL) || (this->parent->health == 0)) {
|
|
DeleteThisEntity();
|
|
}
|
|
if (((this->bitfield & 0x80) != 0) && (this->field_0x4c == &gPlayerEntity)) {
|
|
this->iframes = -0x2d;
|
|
}
|
|
this->bitfield = 0;
|
|
CopyPositionAndSpriteOffset(this->parent, this);
|
|
DarkNutSwordSlash_OnTick(this);
|
|
if (this->type == 3) {
|
|
this->y.HALF.HI += 1;
|
|
UpdateAnimationSingleFrame(this);
|
|
}
|
|
}
|
|
|
|
void DarkNutSwordSlash_Init(Entity* this) {
|
|
this->hitType = DarkNutSwordSlash_hitTypes[this->parent->type + this->type * 4];
|
|
}
|
|
|
|
void DarkNutSwordSlash_OnTick(Entity* this) {
|
|
DarkNutSwordSlash_UpdatesForType[this->type](this);
|
|
}
|
|
|
|
void DarkNutSwordSlash_UpdateType0(Entity* this) {
|
|
Entity* parent = this->parent;
|
|
this->hitbox = (Hitbox*)gUnk_081293E0[parent->animationState][(parent->frame & 0xf) - 1];
|
|
}
|
|
|
|
void DarkNutSwordSlash_UpdateType2(Entity* this) {
|
|
Entity* parent = this->parent;
|
|
this->hitbox = (Hitbox*)gUnk_081293F0[parent->animationState];
|
|
}
|
|
|
|
void DarkNutSwordSlash_UpdateType34(Entity* this) {
|
|
if ((this->parent->frame & 0x10) != 0) {
|
|
this->hitbox = (Hitbox*)gUnk_08129410[this->parent->animationState];
|
|
} else {
|
|
this->hitbox = (Hitbox*)gUnk_08129400[this->parent->animationState];
|
|
}
|
|
}
|
|
|
|
void DarkNutSwordSlash_UpdateType1(Entity* this) {
|
|
Entity* parent = this->parent;
|
|
this->hitbox = (Hitbox*)gUnk_08129420[parent->animationState];
|
|
}
|
|
|
|
const u8 DarkNutSwordSlash_hitTypes[] = {
|
|
76, 76, 78, 77, 83, 83, 83, 83, 79, 79, 76, 80, 84, 84, 84, 85, 79, 79, 76, 80,
|
|
};
|
|
void (*const DarkNutSwordSlash_UpdatesForType[])(Entity*) = {
|
|
DarkNutSwordSlash_UpdateType0, DarkNutSwordSlash_UpdateType1, DarkNutSwordSlash_UpdateType2,
|
|
DarkNutSwordSlash_UpdateType34, DarkNutSwordSlash_UpdateType34,
|
|
};
|
|
|
|
extern const Hitbox* const gUnk_08129460[];
|
|
extern const Hitbox* const gUnk_081294A8[];
|
|
extern const Hitbox* const gUnk_081294F0[];
|
|
extern const Hitbox* const gUnk_08129538[];
|
|
Hitbox const* const* const gUnk_081293E0[] = {
|
|
gUnk_08129460,
|
|
gUnk_081294A8,
|
|
gUnk_081294F0,
|
|
gUnk_08129538,
|
|
};
|
|
extern const Hitbox gUnk_08129550;
|
|
extern const Hitbox gUnk_08129558;
|
|
extern const Hitbox gUnk_08129560;
|
|
extern const Hitbox gUnk_08129568;
|
|
const Hitbox* const gUnk_081293F0[] = {
|
|
&gUnk_08129550,
|
|
&gUnk_08129558,
|
|
&gUnk_08129560,
|
|
&gUnk_08129568,
|
|
};
|
|
extern const Hitbox gUnk_08129590;
|
|
extern const Hitbox gUnk_081295A0;
|
|
extern const Hitbox gUnk_081295B0;
|
|
extern const Hitbox gUnk_081295C0;
|
|
const Hitbox* const gUnk_08129400[] = {
|
|
&gUnk_08129590,
|
|
&gUnk_081295A0,
|
|
&gUnk_081295B0,
|
|
&gUnk_081295C0,
|
|
};
|
|
extern const Hitbox gUnk_08129598;
|
|
extern const Hitbox gUnk_081295A8;
|
|
extern const Hitbox gUnk_081295B8;
|
|
extern const Hitbox gUnk_081295C8;
|
|
const Hitbox* const gUnk_08129410[] = {
|
|
&gUnk_08129598,
|
|
&gUnk_081295A8,
|
|
&gUnk_081295B8,
|
|
&gUnk_081295C8,
|
|
};
|
|
extern const Hitbox gUnk_08129570;
|
|
extern const Hitbox gUnk_08129578;
|
|
extern const Hitbox gUnk_08129580;
|
|
extern const Hitbox gUnk_08129588;
|
|
const Hitbox* const gUnk_08129420[] = {
|
|
&gUnk_08129570,
|
|
&gUnk_08129578,
|
|
&gUnk_08129580,
|
|
&gUnk_08129588,
|
|
};
|
|
|
|
const Hitbox gUnk_08129430 = { -5, -32, { 0, 0, 0, 0 }, 8, 10 };
|
|
const Hitbox gUnk_08129438 = { 2, -37, { 0, 0, 0, 0 }, 8, 10 };
|
|
const Hitbox gUnk_08129440 = { 19, -33, { 0, 0, 0, 0 }, 10, 11 };
|
|
const Hitbox gUnk_08129448 = { 28, -14, { 0, 0, 0, 0 }, 16, 6 };
|
|
const Hitbox gUnk_08129450 = { 34, -18, { 0, 0, 0, 0 }, 8, 4 };
|
|
const Hitbox gUnk_08129458 = { 25, 15, { 0, 0, 0, 0 }, 4, 4 };
|
|
|
|
const Hitbox* const gUnk_08129460[] = {
|
|
&gUnk_08129430, &gUnk_08129438, &gUnk_08129440, &gUnk_08129448, &gUnk_08129450, &gUnk_08129458,
|
|
};
|
|
|
|
const Hitbox gUnk_08129478 = { 21, -6, { 0, 0, 0, 0 }, 12, 8 };
|
|
const Hitbox gUnk_08129480 = { 21, -20, { 0, 0, 0, 0 }, 16, 8 };
|
|
const Hitbox gUnk_08129488 = { 15, -31, { 0, 0, 0, 0 }, 8, 10 };
|
|
const Hitbox gUnk_08129490 = { 3, -39, { 0, 0, 0, 0 }, 8, 12 };
|
|
const Hitbox gUnk_08129498 = { 7, -38, { 0, 0, 0, 0 }, 7, 8 };
|
|
const Hitbox gUnk_081294A0 = { 1, -29, { 0, 0, 0, 0 }, 4, 5 };
|
|
|
|
const Hitbox* const gUnk_081294A8[] = {
|
|
&gUnk_08129478, &gUnk_08129480, &gUnk_08129488, &gUnk_08129490, &gUnk_08129498, &gUnk_081294A0,
|
|
};
|
|
|
|
const Hitbox gUnk_081294C0 = { 7, 7, { 0, 0, 0, 0 }, 8, 11 };
|
|
const Hitbox gUnk_081294C8 = { -6, 10, { 0, 0, 0, 0 }, 8, 12 };
|
|
const Hitbox gUnk_081294D0 = { -22, 2, { 0, 0, 0, 0 }, 8, 8 };
|
|
const Hitbox gUnk_081294D8 = { -27, -11, { 0, 0, 0, 0 }, 12, 8 };
|
|
const Hitbox gUnk_081294E0 = { -28, -9, { 0, 0, 0, 0 }, 15, 6 };
|
|
const Hitbox gUnk_081294E8 = { -21, -12, { 0, 0, 0, 0 }, 6, 2 };
|
|
|
|
const Hitbox* const gUnk_081294F0[] = {
|
|
&gUnk_081294C0, &gUnk_081294C8, &gUnk_081294D0, &gUnk_081294D8, &gUnk_081294E0, &gUnk_081294E8,
|
|
};
|
|
|
|
const Hitbox gUnk_08129508 = { -21, -6, { 0, 0, 0, 0 }, 12, 8 };
|
|
const Hitbox gUnk_08129510 = { -21, -20, { 0, 0, 0, 0 }, 16, 8 };
|
|
const Hitbox gUnk_08129518 = { -15, -31, { 0, 0, 0, 0 }, 8, 10 };
|
|
const Hitbox gUnk_08129520 = { -3, -39, { 0, 0, 0, 0 }, 8, 12 };
|
|
const Hitbox gUnk_08129528 = { -7, -38, { 0, 0, 0, 0 }, 7, 8 };
|
|
const Hitbox gUnk_08129530 = { -1, -29, { 0, 0, 0, 0 }, 4, 5 };
|
|
|
|
const Hitbox* const gUnk_08129538[] = {
|
|
&gUnk_08129508, &gUnk_08129510, &gUnk_08129518, &gUnk_08129520, &gUnk_08129528, &gUnk_08129530,
|
|
};
|
|
|
|
const Hitbox gUnk_08129550 = { 3, -30, { 0, 0, 0, 0 }, 7, 10 };
|
|
const Hitbox gUnk_08129558 = { 28, -12, { 0, 0, 0, 0 }, 14, 7 };
|
|
const Hitbox gUnk_08129560 = { -2, 14, { 0, 0, 0, 0 }, 12, 7 };
|
|
const Hitbox gUnk_08129568 = { -28, -12, { 0, 0, 0, 0 }, 14, 7 };
|
|
const Hitbox gUnk_08129570 = { 1, -29, { 0, 0, 0, 0 }, 8, 8 };
|
|
const Hitbox gUnk_08129578 = { 19, -8, { 0, 0, 0, 0 }, 8, 8 };
|
|
const Hitbox gUnk_08129580 = { 0, 10, { 0, 0, 0, 0 }, 8, 8 };
|
|
const Hitbox gUnk_08129588 = { -19, -8, { 0, 0, 0, 0 }, 8, 8 };
|
|
const Hitbox gUnk_08129590 = { 4, -37, { 0, 0, 0, 0 }, 7, 10 };
|
|
const Hitbox gUnk_08129598 = { 4, -35, { 0, 0, 0, 0 }, 2, 8 };
|
|
const Hitbox gUnk_081295A0 = { 32, -14, { 0, 0, 0, 0 }, 14, 6 };
|
|
const Hitbox gUnk_081295A8 = { 30, -14, { 0, 0, 0, 0 }, 12, 2 };
|
|
const Hitbox gUnk_081295B0 = { -1, 22, { 0, 0, 0, 0 }, 7, 12 };
|
|
const Hitbox gUnk_081295B8 = { -1, 20, { 0, 0, 0, 0 }, 2, 10 };
|
|
const Hitbox gUnk_081295C0 = { -32, -14, { 0, 0, 0, 0 }, 14, 6 };
|
|
const Hitbox gUnk_081295C8 = { -30, -14, { 0, 0, 0, 0 }, 12, 2 };
|