mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-06-11 04:37:57 -04:00
103 lines
3.2 KiB
C
103 lines
3.2 KiB
C
#include "ef_effect_control.h"
|
|
|
|
#include "m_common_data.h"
|
|
|
|
#define eHanabiDummy_TIMER 80
|
|
#define eHanabiDummy_MIN_POWER 0.0f
|
|
#define eHanabiDummy_MAX_POWER 2.0f
|
|
#define eHanabiDummy_MAX_DIST (mFI_UNIT_BASE_SIZE_F * 12)
|
|
|
|
enum {
|
|
eHanabiDummy_TYPE0,
|
|
eHanabiDummy_TYPE1,
|
|
eHanabiDummy_TYPE2,
|
|
eHanabiDummy_TYPE3,
|
|
eHanabiDummy_TYPE4,
|
|
eHanabiDummy_TYPE5,
|
|
|
|
eHanabiDummy_TYPE_NUM
|
|
};
|
|
|
|
#define eHanabiDummy_TYPE_ARG (effect->effect_specific[0])
|
|
|
|
static void eHanabiDummy_init(xyz_t pos, int prio, s16 angle, GAME* game, u16 item_name, s16 arg0, s16 arg1);
|
|
static void eHanabiDummy_ct(eEC_Effect_c* effect, GAME* game, void* ct_arg);
|
|
static void eHanabiDummy_mv(eEC_Effect_c* effect, GAME* game);
|
|
static void eHanabiDummy_dw(eEC_Effect_c* effect, GAME* game);
|
|
|
|
eEC_PROFILE_c iam_ef_hanabi_dummy = {
|
|
// clang-format off
|
|
&eHanabiDummy_init,
|
|
&eHanabiDummy_ct,
|
|
&eHanabiDummy_mv,
|
|
&eHanabiDummy_dw,
|
|
eEC_IGNORE_DEATH,
|
|
eEC_NO_CHILD_ID,
|
|
eEC_IGNORE_DEATH_DIST,
|
|
// clang-format on
|
|
};
|
|
|
|
static void eHanabiDummy_init(xyz_t pos, int prio, s16 angle, GAME* game, u16 item_name, s16 arg0, s16 arg1) {
|
|
(*eEC_CLIP->make_effect_proc)(eEC_EFFECT_HANABI_DUMMY, pos, NULL, game, NULL, item_name, prio, arg0, arg1);
|
|
}
|
|
|
|
static void eHanabiDummy_ct(eEC_Effect_c* effect, GAME* game, void* ct_arg) {
|
|
effect->timer = eHanabiDummy_TIMER;
|
|
eHanabiDummy_TYPE_ARG = RANDOM(eHanabiDummy_TYPE_NUM);
|
|
}
|
|
|
|
static void eHanabiDummy_mv(eEC_Effect_c* effect, GAME* game) {
|
|
rgba_t light_color;
|
|
s16 frames_passed = eHanabiDummy_TIMER - effect->timer;
|
|
|
|
if (frames_passed == 10) {
|
|
static rgba_t dummy_light[eHanabiDummy_TYPE_NUM] = {
|
|
{ 50, 30, 20, 255 }, { 20, 60, 20, 255 }, { 40, 10, 60, 255 },
|
|
{ 40, 20, 20, 255 }, { 20, 40, 20, 255 }, { 60, 60, 30, 255 },
|
|
};
|
|
|
|
eEC_CLIP->decide_light_power_proc(&light_color, dummy_light[eHanabiDummy_TYPE_ARG], effect->position, game,
|
|
eHanabiDummy_MAX_POWER, eHanabiDummy_MIN_POWER, eHanabiDummy_MAX_DIST);
|
|
if (effect->arg0 != 0) {
|
|
light_color.r = light_color.r * eHanabiDummy_MAX_POWER;
|
|
light_color.g = light_color.g * eHanabiDummy_MAX_POWER;
|
|
light_color.b = light_color.b * eHanabiDummy_MAX_POWER;
|
|
}
|
|
|
|
eEC_CLIP->regist_effect_light(light_color, 20, 50, TRUE);
|
|
}
|
|
|
|
if (frames_passed == 72) {
|
|
xyz_t pos = effect->position;
|
|
u16 sfx_no;
|
|
|
|
pos.y += 200.0f;
|
|
|
|
switch (eHanabiDummy_TYPE_ARG) {
|
|
case eHanabiDummy_TYPE0:
|
|
case eHanabiDummy_TYPE1:
|
|
sfx_no = NA_SE_HANABI0;
|
|
break;
|
|
case eHanabiDummy_TYPE2:
|
|
sfx_no = NA_SE_HANABI1;
|
|
break;
|
|
case eHanabiDummy_TYPE3:
|
|
case eHanabiDummy_TYPE4:
|
|
sfx_no = NA_SE_HANABI2;
|
|
break;
|
|
case eHanabiDummy_TYPE5:
|
|
sfx_no = NA_SE_HANABI3;
|
|
break;
|
|
default:
|
|
sfx_no = NA_SE_HANABI0;
|
|
break;
|
|
}
|
|
|
|
sAdo_OngenTrgStart(sfx_no, &pos);
|
|
}
|
|
}
|
|
|
|
static void eHanabiDummy_dw(eEC_Effect_c* effect, GAME* game) {
|
|
// empty
|
|
}
|