mirror of https://github.com/zeldaret/tp.git
395 lines
12 KiB
C++
395 lines
12 KiB
C++
/**
|
|
* @file d_a_coach_2D.cpp
|
|
*
|
|
*/
|
|
|
|
#include "d/dolzel_rel.h"
|
|
|
|
#include "d/actor/d_a_coach_2D.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/d_meter2_info.h"
|
|
#include "d/d_msg_object.h"
|
|
#include "JSystem/J2DGraph/J2DGrafContext.h"
|
|
#include "JSystem/J2DGraph/J2DScreen.h"
|
|
#include "JSystem/J2DGraph/J2DAnmLoader.h"
|
|
|
|
class daCoach2D_HIO_c : public mDoHIO_entry_c {
|
|
public:
|
|
struct Param {
|
|
/* 0x00 */ f32 pos_x;
|
|
/* 0x04 */ f32 pos_y;
|
|
/* 0x08 */ f32 size;
|
|
/* 0x0C */ f32 alpha;
|
|
/* 0x10 */ f32 icon_space_x;
|
|
/* 0x14 */ f32 icon_pos_x;
|
|
/* 0x18 */ f32 icon_pos_y;
|
|
/* 0x1C */ f32 icon_size;
|
|
/* 0x20 */ f32 icon_alpha;
|
|
/* 0x24 */ f32 coach_pos_x;
|
|
/* 0x28 */ f32 coach_pos_y;
|
|
/* 0x2C */ f32 coach_size;
|
|
/* 0x30 */ f32 coach_alpha;
|
|
/* 0x34 */ f32 blink_speed_min;
|
|
/* 0x38 */ f32 blink_speed_max;
|
|
/* 0x3C */ f32 pikari_scale;
|
|
/* 0x40 */ f32 pikari_anim_speed;
|
|
/* 0x44 */ u8 pikari_moyaR0_R;
|
|
/* 0x45 */ u8 pikari_moyaR0_G;
|
|
/* 0x46 */ u8 pikari_moyaR0_B;
|
|
/* 0x47 */ u8 pikari_moyaR0_A;
|
|
/* 0x48 */ u8 pikari_moyaR1_R;
|
|
/* 0x49 */ u8 pikari_moyaR1_G;
|
|
/* 0x4A */ u8 pikari_moyaR1_B;
|
|
/* 0x4B */ u8 pikari_moyaR1_A;
|
|
/* 0x4C */ u8 unk_0x4C;
|
|
/* 0x4D */ u8 unk_0x4D;
|
|
/* 0x4E */ u8 unk_0x4E;
|
|
/* 0x4F */ u8 unk_0x4F;
|
|
/* 0x50 */ u8 unk_0x50;
|
|
/* 0x51 */ u8 unk_0x51;
|
|
/* 0x52 */ u8 unk_0x52;
|
|
/* 0x53 */ u8 unk_0x53;
|
|
/* 0x54 */ u8 debug_ON;
|
|
/* 0x55 */ u8 max_damage_num;
|
|
/* 0x56 */ u8 now_damage_num;
|
|
/* 0x57 */ u8 reverse_flag;
|
|
};
|
|
|
|
daCoach2D_HIO_c() {
|
|
static Param aParam = {
|
|
45.0f,
|
|
-15.0f,
|
|
1.0f,
|
|
1.0f,
|
|
7.5f,
|
|
-6.5f,
|
|
0.0f,
|
|
0.5f,
|
|
1.0f,
|
|
0.0f,
|
|
0.0f,
|
|
1.0f,
|
|
1.0f,
|
|
1.0f,
|
|
5.0f,
|
|
3.0f,
|
|
8.0f,
|
|
0xFF, 0xFF, 0xFF, 0xB9,
|
|
0x00, 0x9B, 0x00, 0x00,
|
|
0xFF, 0xFF, 0xFF, 0x57,
|
|
0x00, 0x73, 0x00, 0x00,
|
|
false,
|
|
20,
|
|
0,
|
|
1,
|
|
};
|
|
|
|
memcpy(¶m, &aParam, sizeof(Param));
|
|
}
|
|
|
|
/* 80657738 */ virtual ~daCoach2D_HIO_c() {}
|
|
void genMessage(JORMContext*) {}
|
|
|
|
/* 0x4 */ Param param;
|
|
};
|
|
|
|
/* 806569CC-80656A18 0000EC 004C+00 1/0 0/0 0/0 .text draw__Q211daCoach2D_c6c_listFv */
|
|
void daCoach2D_c::c_list::draw() {
|
|
dComIfGp_getCurrentGrafPort()->setup2D();
|
|
mpCoach2D->drawMeter();
|
|
}
|
|
|
|
/* 80656A18-80656A38 000138 0020+00 1/1 0/0 0/0 .text daCoach2D_createHeap__FP10fopAc_ac_c */
|
|
static int daCoach2D_createHeap(fopAc_ac_c* i_this) {
|
|
return ((daCoach2D_c*)i_this)->createHeap();
|
|
}
|
|
|
|
/* 806579F4-806579F8 -00001 0004+00 3/3 0/0 0/0 .data l_arcName */
|
|
static char* l_arcName = "Coach2D";
|
|
|
|
/* 80657A9C-80657AF8 000014 005C+00 5/5 0/0 0/0 .bss l_HOSTIO */
|
|
static daCoach2D_HIO_c l_HOSTIO;
|
|
|
|
/* 80656A38-80656D18 000158 02E0+00 1/1 0/0 0/0 .text createHeap__11daCoach2D_cFv */
|
|
int daCoach2D_c::createHeap() {
|
|
mpScrn = new J2DScreen();
|
|
if (mpScrn == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
dRes_info_c* resInfo = dComIfG_getObjectResInfo(l_arcName);
|
|
JUT_ASSERT(285, resInfo != 0);
|
|
|
|
JKRArchive* archive = resInfo->getArchive();
|
|
mpScrn->setPriority("zelda_game_image_fire_icon.blo", 0x20000, archive);
|
|
dPaneClass_showNullPane(mpScrn);
|
|
|
|
void* res = dComIfG_getObjectRes(l_arcName, "zelda_game_image_fire_icon.brk");
|
|
mpFireIconBrk = (J2DAnmTevRegKey*)J2DAnmLoaderDataBase::load(res);
|
|
mpFireIconBrk->searchUpdateMaterialID(mpScrn);
|
|
setBrkAnime(true);
|
|
|
|
mpPaneAll = new CPaneMgr(mpScrn, 'n_all', 2, NULL);
|
|
mpPaneBasha = new CPaneMgr(mpScrn, 'basha_n', 2, NULL);
|
|
mpPaneFire = new CPaneMgr(mpScrn, 'fire_n', 2, NULL);
|
|
|
|
mpScrn->search('fire_b_n')->move(mpPaneFire->getPosX(), mpPaneFire->getPosY());
|
|
|
|
mpPaneFireB = new CPaneMgr(mpScrn, 'fire_b_n', 2, NULL);
|
|
|
|
mMsgLight = new dMsgScrnLight_c(6, 0xFF);
|
|
|
|
if (mpPaneAll == NULL || mpPaneBasha == NULL || mpPaneFire == NULL || mpPaneFireB == NULL || mMsgLight == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
mList.set(this);
|
|
|
|
if (fopAcM_GetParam(this) & 1) {
|
|
show();
|
|
} else {
|
|
hide();
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 80656D18-80656D94 000438 007C+00 1/1 0/0 0/0 .text create__11daCoach2D_cFv */
|
|
int daCoach2D_c::create() {
|
|
int phase_state = dComIfG_resLoad(this, l_arcName);
|
|
if (phase_state == cPhs_COMPLEATE_e) {
|
|
if (!fopAcM_entrySolidHeap(this, daCoach2D_createHeap, 0x5050)) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
#ifdef DEBUG
|
|
l_HOSTIO.entryHIO("馬車アイコン");
|
|
#endif
|
|
}
|
|
|
|
return phase_state;
|
|
}
|
|
|
|
/* 80656D94-80656DE4 0004B4 0050+00 1/1 0/0 0/0 .text destroy__11daCoach2D_cFv */
|
|
int daCoach2D_c::destroy() {
|
|
dComIfG_resDelete(this, l_arcName);
|
|
#ifdef DEBUG
|
|
l_HOSTIO.removeHIO();
|
|
#endif
|
|
|
|
dMeter2Info_offSub2DStatus(0);
|
|
return 1;
|
|
}
|
|
|
|
/* 80656DE4-80656E94 000504 00B0+00 1/1 0/0 0/0 .text draw__11daCoach2D_cFv */
|
|
int daCoach2D_c::draw() {
|
|
if (isVisible() && !dComIfGp_isPauseFlag() && !dMsgObject_isTalkNowCheck()) {
|
|
dComIfGd_set2DOpa(&mList);
|
|
dMeter2Info_onSub2DStatus(0);
|
|
} else {
|
|
dMeter2Info_offSub2DStatus(0);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
/* 80656E94-80656ED0 0005B4 003C+00 1/1 0/0 0/0 .text execute__11daCoach2D_cFv */
|
|
int daCoach2D_c::execute() {
|
|
#ifdef DEBUG
|
|
s32 freeSize = mDoExt_getCurrentHeap()->getTotalFreeSize();
|
|
#endif
|
|
|
|
setBrkAnime(false);
|
|
mpScrn->animation();
|
|
|
|
JUT_ASSERT(426, freeSize == mDoExt_getCurrentHeap()->getTotalFreeSize());
|
|
return 1;
|
|
}
|
|
|
|
/* 80656ED0-8065722C 0005F0 035C+00 1/1 0/0 0/0 .text drawMeter__11daCoach2D_cFv */
|
|
void daCoach2D_c::drawMeter() {
|
|
update();
|
|
if (l_HOSTIO.param.reverse_flag) {
|
|
mpPaneAll->getPanePtr()->rotateY(180.0f);
|
|
} else {
|
|
mpPaneAll->getPanePtr()->rotateY(0.0f);
|
|
}
|
|
|
|
for (int i = 0; i < mMaxHitCount; i++) {
|
|
mpPaneFire->paneTrans(mIconInfo[i].pos_x, mIconInfo[i].pos_y);
|
|
mpPaneFireB->paneTrans(mIconInfo[i].pos_x, mIconInfo[i].pos_y);
|
|
|
|
if (i < mHitCount) {
|
|
mpPaneBasha->hide();
|
|
mpPaneFire->show();
|
|
mpPaneFireB->hide();
|
|
|
|
if (i == mHitCount - 1) {
|
|
mpPaneFire->scale(1.0f, 1.0f);
|
|
} else {
|
|
mpPaneFire->scale(l_HOSTIO.param.icon_size, l_HOSTIO.param.icon_size);
|
|
}
|
|
|
|
mpScrn->draw(0.0f, 0.0f, dComIfGp_getCurrentGrafPort());
|
|
|
|
if (mIconInfo[i].field_0x15 == 0xFF) {
|
|
mIconInfo[i].pikari_anm_frame = 0.0f;
|
|
mIconInfo[i].field_0x15 = 1;
|
|
}
|
|
|
|
if (mIconInfo[i].field_0x15 == 1) {
|
|
Vec sp2C = mpPaneFire->getGlobalVtxCenter(false, 0);
|
|
mIconInfo[i].pikari_pos_x = sp2C.x;
|
|
mIconInfo[i].pikari_pos_y = sp2C.y;
|
|
}
|
|
} else {
|
|
mpPaneBasha->hide();
|
|
mpPaneFire->hide();
|
|
mpPaneFireB->show();
|
|
|
|
mpPaneFireB->scale(l_HOSTIO.param.icon_size, l_HOSTIO.param.icon_size);
|
|
mpScrn->draw(0.0f, 0.0f, dComIfGp_getCurrentGrafPort());
|
|
|
|
if (mIconInfo[i].field_0x15 == 0) {
|
|
mIconInfo[i].field_0x15 = 0xFF;
|
|
}
|
|
}
|
|
}
|
|
|
|
mpPaneBasha->show();
|
|
mpPaneFire->hide();
|
|
mpPaneFireB->hide();
|
|
|
|
mpPaneBasha->paneTrans(l_HOSTIO.param.coach_pos_x, l_HOSTIO.param.coach_pos_y);
|
|
mpScrn->draw(0.0f, 0.0f, dComIfGp_getCurrentGrafPort());
|
|
|
|
for (int i = 0; i < mMaxHitCount; i++) {
|
|
if (mIconInfo[i].field_0x15 == 1) {
|
|
mMsgLight->draw(&mIconInfo[i].pikari_anm_frame,
|
|
mIconInfo[i].pikari_pos_x, mIconInfo[i].pikari_pos_y,
|
|
l_HOSTIO.param.pikari_scale, l_HOSTIO.param.pikari_scale, 1.0f, l_HOSTIO.param.pikari_anim_speed,
|
|
JUtility::TColor(l_HOSTIO.param.pikari_moyaR1_R, l_HOSTIO.param.pikari_moyaR1_G, l_HOSTIO.param.pikari_moyaR1_B, l_HOSTIO.param.pikari_moyaR1_A),
|
|
JUtility::TColor(l_HOSTIO.param.pikari_moyaR0_R, l_HOSTIO.param.pikari_moyaR0_G, l_HOSTIO.param.pikari_moyaR0_B, l_HOSTIO.param.pikari_moyaR0_A));
|
|
|
|
if (0.0f == mIconInfo[i].pikari_anm_frame) {
|
|
mIconInfo[i].field_0x15 = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 8065722C-80657260 00094C 0034+00 1/1 0/0 0/0 .text initiate__11daCoach2D_cFv */
|
|
void daCoach2D_c::initiate() {
|
|
for (int i = 0; i < 20; i++) {
|
|
mIconInfo[i].field_0x15 = 0xFF;
|
|
}
|
|
|
|
mMaxHitCount = l_HOSTIO.param.max_damage_num;
|
|
}
|
|
|
|
/* 80657260-80657490 000980 0230+00 1/1 0/0 0/0 .text update__11daCoach2D_cFv */
|
|
void daCoach2D_c::update() {
|
|
f32 var_f29 = l_HOSTIO.param.icon_space_x;
|
|
f32 icon_pos_x = l_HOSTIO.param.icon_pos_x + ((mMaxHitCount - 1) * var_f29);
|
|
f32 var_f28 = l_HOSTIO.param.icon_pos_y;
|
|
|
|
for (int i = 0; i < 20; i++) {
|
|
mIconInfo[i].pos_x = icon_pos_x;
|
|
mIconInfo[i].pos_y = var_f28;
|
|
icon_pos_x -= var_f29;
|
|
}
|
|
|
|
f32 var_f30 = 4.0f * ((J2DPicture*)mpScrn->search('basha_p0'))->getWhite().r;
|
|
if (var_f30 > 255.0f) {
|
|
var_f30 = 255.0f;
|
|
}
|
|
|
|
f32 temp_f27 = (70.0f + (185.0f * (var_f30 / 255.0f))) / 255.0f;
|
|
mpPaneAll->paneTrans(l_HOSTIO.param.pos_x, l_HOSTIO.param.pos_y);
|
|
mpPaneAll->scale(l_HOSTIO.param.size, l_HOSTIO.param.size);
|
|
mpPaneAll->setAlphaRate(l_HOSTIO.param.alpha);
|
|
mpPaneFire->setAlphaRate(temp_f27 * (l_HOSTIO.param.icon_alpha * l_HOSTIO.param.alpha));
|
|
mpPaneFireB->setAlphaRate(l_HOSTIO.param.icon_alpha * l_HOSTIO.param.alpha);
|
|
mpPaneBasha->scale(l_HOSTIO.param.coach_size, l_HOSTIO.param.coach_size);
|
|
mpPaneBasha->setAlphaRate(l_HOSTIO.param.coach_alpha * l_HOSTIO.param.alpha);
|
|
|
|
if (l_HOSTIO.param.debug_ON) {
|
|
mMaxHitCount = l_HOSTIO.param.max_damage_num;
|
|
mHitCount = l_HOSTIO.param.now_damage_num;
|
|
}
|
|
}
|
|
|
|
/* 80657490-8065764C 000BB0 01BC+00 2/2 0/0 0/0 .text setBrkAnime__11daCoach2D_cFb */
|
|
void daCoach2D_c::setBrkAnime(bool param_0) {
|
|
if (mHitCount != 0) {
|
|
mBrkSpeed = l_HOSTIO.param.blink_speed_min + ((l_HOSTIO.param.blink_speed_max - l_HOSTIO.param.blink_speed_min) * ((f32)mHitCount / (f32)mMaxHitCount));
|
|
} else {
|
|
mBrkSpeed = 0.0f;
|
|
}
|
|
|
|
if (mBrkSpeed > 0.0f && !param_0) {
|
|
mBrkFrame += mBrkSpeed;
|
|
if (mBrkFrame >= mpFireIconBrk->getFrameMax()) {
|
|
mBrkFrame -= mpFireIconBrk->getFrameMax();
|
|
}
|
|
mpScrn->search('basha_f0')->show();
|
|
} else {
|
|
mpScrn->search('basha_f0')->hide();
|
|
mBrkFrame = 0.0f;
|
|
}
|
|
|
|
mpFireIconBrk->setFrame(mBrkFrame);
|
|
mpScrn->search('basha_p0')->setAnimation(mpFireIconBrk);
|
|
}
|
|
|
|
/* 8065764C-806576D4 000D6C 0088+00 1/0 0/0 0/0 .text daCoach2D_create__FP11daCoach2D_c
|
|
*/
|
|
static int daCoach2D_create(daCoach2D_c* i_this) {
|
|
fopAcM_SetupActor(i_this, daCoach2D_c);
|
|
return i_this->create();
|
|
}
|
|
|
|
/* 806576D4-806576F4 000DF4 0020+00 1/0 0/0 0/0 .text daCoach2D_destroy__FP11daCoach2D_c
|
|
*/
|
|
static int daCoach2D_destroy(daCoach2D_c* i_this) {
|
|
return i_this->destroy();
|
|
}
|
|
|
|
/* 806576F4-80657714 000E14 0020+00 1/0 0/0 0/0 .text daCoach2D_execute__FP11daCoach2D_c
|
|
*/
|
|
static int daCoach2D_execute(daCoach2D_c* i_this) {
|
|
return i_this->execute();
|
|
}
|
|
|
|
/* 80657714-80657734 000E34 0020+00 1/0 0/0 0/0 .text daCoach2D_draw__FP11daCoach2D_c */
|
|
static int daCoach2D_draw(daCoach2D_c* i_this) {
|
|
return i_this->draw();
|
|
}
|
|
|
|
/* 806579F8-80657A18 -00001 0020+00 1/0 0/0 0/0 .data daCoach2D_METHODS */
|
|
static actor_method_class daCoach2D_METHODS = {
|
|
(process_method_func)daCoach2D_create,
|
|
(process_method_func)daCoach2D_destroy,
|
|
(process_method_func)daCoach2D_execute,
|
|
NULL,
|
|
(process_method_func)daCoach2D_draw,
|
|
};
|
|
|
|
/* 80657A18-80657A48 -00001 0030+00 0/0 0/0 1/0 .data g_profile_COACH2D */
|
|
extern actor_process_profile_definition g_profile_COACH2D = {
|
|
fpcLy_CURRENT_e, // mLayerID
|
|
3, // mListID
|
|
fpcPi_CURRENT_e, // mListPrio
|
|
PROC_COACH2D, // mProcName
|
|
&g_fpcLf_Method.base, // sub_method
|
|
sizeof(daCoach2D_c), // mSize
|
|
0, // mSizeOther
|
|
0, // mParameters
|
|
&g_fopAc_Method.base, // sub_method
|
|
764, // mPriority
|
|
&daCoach2D_METHODS, // sub_method
|
|
0x00040000, // mStatus
|
|
fopAc_ACTOR_e, // mActorType
|
|
fopAc_CULLBOX_0_e, // cullType
|
|
};
|