tp/src/d/d_file_sel_info.cpp

228 lines
8.3 KiB
C++

/**
* d_file_sel_info.cpp
* File Select Screen File Info
*/
#include "d/dolzel.h"
#include "d/d_file_sel_info.h"
#include "JSystem/J2DGraph/J2DScreen.h"
#include "JSystem/J2DGraph/J2DTextBox.h"
#include "d/d_com_inf_game.h"
#include "d/d_meter2_info.h"
#include "d/d_pane_class_alpha.h"
#include "stdio.h"
/* 80192434-801924A0 18CD74 006C+00 0/0 3/3 0/0 .text __ct__12dFile_info_cFP10JKRArchiveUc */
dFile_info_c::dFile_info_c(JKRArchive* i_archive, u8 param_1) {
mArchive = i_archive;
field_0x22 = param_1;
mFileInfo.mBasePane = NULL;
screenSet();
field_0x20 = 0;
}
/* 801924A0-80192570 18CDE0 00D0+00 1/0 0/0 0/0 .text __dt__12dFile_info_cFv */
dFile_info_c::~dFile_info_c() {
delete mFileInfo.Scr;
delete mDatBase;
delete mNoDatBase;
mDoExt_removeMesgFont();
}
/* 80192570-80192954 18CEB0 03E4+00 1/1 0/0 0/0 .text screenSet__12dFile_info_cFv */
void dFile_info_c::screenSet() {
mFileInfo.Scr = new J2DScreen();
JUT_ASSERT(0, mFileInfo.Scr != 0);
mFileInfo.Scr->setPriority("zelda_file_select_info_text.blo", 0x1100000, mArchive);
mFileInfo.mFont = mDoExt_getMesgFont();
mFileInfo.Scr->search('w_cp_ef1')->hide();
mFileInfo.field_0x10 = mFileInfo.Scr->search('w_dat_i1');
mDatBase = new CPaneMgrAlpha(mFileInfo.Scr, 'w_dat_i1', 2, NULL);
mNoDatBase = new CPaneMgrAlpha(mFileInfo.Scr, 'w_nda_i1', 2, NULL);
J2DTextBox* info_text[4];
#if (VERSION == VERSION_GCN_JPN) || (VERSION == VERSION_WII_JPN)
info_text[0] = (J2DTextBox*)mFileInfo.Scr->search('w_s_t_01');
info_text[1] = (J2DTextBox*)mFileInfo.Scr->search('w_p_t_01');
mFileInfo.Scr->search('f_s_t_02')->hide();
mFileInfo.Scr->search('f_p_t_02')->hide();
#else
info_text[0] = (J2DTextBox*)mFileInfo.Scr->search('f_s_t_02');
info_text[1] = (J2DTextBox*)mFileInfo.Scr->search('f_p_t_02');
mFileInfo.Scr->search('w_s_t_01')->hide();
mFileInfo.Scr->search('w_p_t_01')->hide();
#endif
for (int i = 0; i < 2; i++) {
info_text[i]->setFont(mFileInfo.mFont);
info_text[i]->setString(0x20, "");
}
dMeter2Info_getString(0x3D0, info_text[0]->getStringPtr(), NULL); // Save time
dMeter2Info_getString(0x3D1, info_text[1]->getStringPtr(), NULL); // Total play time
#if (VERSION == VERSION_GCN_JPN) || (VERSION == VERSION_WII_JPN)
info_text[0] = (J2DTextBox*)mFileInfo.Scr->search('w_name01');
info_text[1] = (J2DTextBox*)mFileInfo.Scr->search('w_new_1');
mFileInfo.Scr->search('f_name01')->hide();
mFileInfo.Scr->search('f_new_1')->hide();
#else
info_text[0] = (J2DTextBox*)mFileInfo.Scr->search('f_name01');
info_text[1] = (J2DTextBox*)mFileInfo.Scr->search('f_new_1');
mFileInfo.Scr->search('w_name01')->hide();
mFileInfo.Scr->search('w_new_1')->hide();
#endif
info_text[2] = (J2DTextBox*)mFileInfo.Scr->search('w_time01');
info_text[3] = (J2DTextBox*)mFileInfo.Scr->search('w_ptim01');
for (int i = 0; i < 4; i++) {
info_text[i]->setFont(mFileInfo.mFont);
info_text[i]->setString(0x40, "");
}
mPlayerName = info_text[0]->getStringPtr();
mSaveStatus = info_text[1]->getStringPtr();
mSaveDate = info_text[2]->getStringPtr();
mPlayTime = info_text[3]->getStringPtr();
}
/* 80192954-80192AA0 18D294 014C+00 0/0 3/3 0/0 .text setSaveData__12dFile_info_cFP10dSv_save_ciUc
*/
int dFile_info_c::setSaveData(dSv_save_c* i_savedata, BOOL i_validChksum, u8 i_dataNo) {
if (i_validChksum) {
char* player_name = i_savedata->getPlayer().getPlayerInfo().getLinkName();
if (*player_name == 0) {
if (field_0x22 == 1 && i_dataNo == dComIfGs_getDataNum()) {
i_savedata->getPlayer().getPlayerStatusA().setLife(dComIfGs_getLife());
setHeartCnt(i_savedata);
i_savedata->getPlayer().getPlayerStatusA().setLife(12);
strcpy(mPlayerName, dComIfGs_getPlayerName());
strcpy(mSaveDate, "");
strcpy(mPlayTime, "");
dMeter2Info_getString(0x4D, mSaveStatus, NULL); // New Quest Log
return 2;
} else {
dMeter2Info_getString(0x4D, mSaveStatus, NULL); // New Quest Log
return 1;
}
} else {
setHeartCnt(i_savedata);
strcpy(mPlayerName, player_name);
setSaveDate(i_savedata);
setPlayTime(i_savedata);
return 0;
}
} else {
dMeter2Info_getString(0x51, mSaveStatus, NULL); // This Quest Log is Corrupted
return -1;
}
}
/* 80192AA0-80192C08 18D3E0 0168+00 1/1 0/0 0/0 .text setHeartCnt__12dFile_info_cFP10dSv_save_c */
void dFile_info_c::setHeartCnt(dSv_save_c* i_savedata) {
static u64 l_htag[] = {
'hear_20', 'hear_21', 'hear_22', 'hear_23', 'hear_24', 'hear_25', 'hear_26',
'hear_27', 'hear_28', 'hear_29', 'hear_30', 'hear_31', 'hear_32', 'hear_33',
'hear_34', 'hear_35', 'hear_36', 'hear_37', 'hear_38', 'hear_39',
};
static const char* amariheartTex[] = {
"tt_heart_00.bti",
"tt_heart_00.bti",
"tt_heart_00.bti",
"tt_heart_00.bti",
};
u16 life = i_savedata->getPlayer().getPlayerStatusA().getLife();
s32 count = (life & 0xFFFF) / 5;
s32 quarter_count = life % 5;
if (quarter_count != 0) {
count++;
}
J2DPicture* heart_tex[20];
for (int i = 0; i < 20; i++) {
heart_tex[i] = (J2DPicture*)mFileInfo.Scr->search(l_htag[i]);
if (i < i_savedata->getPlayer().getPlayerStatusA().getMaxLife() / 5) {
heart_tex[i]->show();
if (i < count) {
if (quarter_count != 0 && i == count - 1) {
heart_tex[i]->changeTexture(amariheartTex[quarter_count - 1], 0);
} else {
heart_tex[i]->changeTexture("tt_heart_00.bti", 0);
}
} else {
heart_tex[i]->changeTexture("tt_heart_00.bti", 0);
}
} else {
heart_tex[i]->hide();
}
}
}
/* 803BB570-803BB588 018690 0018+00 0/1 0/0 0/0 .data fileWarningProc */
typedef void (dFile_info_c::*procFunc)();
static procFunc fileWarningProc[] = {&dFile_info_c::modeWait, &dFile_info_c::modeMove};
/* 80192C08-80192C70 18D548 0068+00 1/1 0/0 0/0 .text setSaveDate__12dFile_info_cFP10dSv_save_c */
void dFile_info_c::setSaveDate(dSv_save_c* i_savedata) {
OSCalendarTime time;
OSTicksToCalendarTime(i_savedata->getPlayer().getPlayerStatusB().getDateIpl(), &time);
#if (VERSION == VERSION_GCN_JPN) || (VERSION == VERSION_WII_JPN)
sprintf(mSaveDate, "%d.%02d.%02d %02d:%02d", time.year, time.mon + 1, time.mday,
time.hour, time.min);
#else
sprintf(mSaveDate, "%02d/%02d/%d %02d:%02d", time.mon + 1, time.mday, time.year,
time.hour, time.min);
#endif
}
/* 80192C70-80192D58 18D5B0 00E8+00 1/1 0/0 0/0 .text setPlayTime__12dFile_info_cFP10dSv_save_c */
void dFile_info_c::setPlayTime(dSv_save_c* i_savedata) {
s64 time = i_savedata->getPlayer().getPlayerInfo().getTotalTime() / (OS_BUS_CLOCK / 4);
// 3599940 = 999:59 in seconds
if (time >= 3599940) {
sprintf(mPlayTime, "999:59");
} else {
u32 min = (time % 3600) / 60;
u32 hours = time / 3600;
sprintf(mPlayTime, "%d:%02d", hours, min);
}
}
/* 80192D58-80192D5C 18D698 0004+00 1/0 0/0 0/0 .text modeWait__12dFile_info_cFv */
void dFile_info_c::modeWait() {}
/* 80192D5C-80192D60 18D69C 0004+00 1/0 0/0 0/0 .text modeMove__12dFile_info_cFv */
void dFile_info_c::modeMove() {}
/* 80192D60-80192D9C 18D6A0 003C+00 0/0 2/2 0/0 .text _draw__12dFile_info_cFv */
void dFile_info_c::_draw() {
dComIfGd_set2DOpa(&mFileInfo);
}
/* 80192D9C-80192E88 18D6DC 00EC+00 1/0 0/0 0/0 .text draw__16dDlst_FileInfo_cFv */
void dDlst_FileInfo_c::draw() {
Mtx m;
J2DGrafContext* graf_ctx = dComIfGp_getCurrentGrafPort();
if (mBasePane != NULL) {
// fake match?
MtxP glb_mtx = (MtxP)&mBasePane->getGlbMtx()[0][0];
MTXScale(m, mBasePane->getWidth() / field_0x10->getWidth(),
mBasePane->getHeight() / field_0x10->getHeight(), 1.0f);
MTXConcat(glb_mtx, m, glb_mtx);
Scr->search('Nm_02')->setMtx(glb_mtx);
}
Scr->draw(0.0f, 0.0f, graf_ctx);
}