tp/src/d/d_menu_collect.cpp

2695 lines
97 KiB
C++

/**
* d_menu_collect.cpp
* Collection Menu
*/
#include "d/dolzel.h" // IWYU pragma: keep
#include "d/d_menu_collect.h"
#include "JSystem/J3DGraphLoader/J3DModelLoader.h"
#include "JSystem/J3DGraphLoader/J3DAnmLoader.h"
#include "JSystem/J2DGraph/J2DTextBox.h"
#include "JSystem/JKernel/JKRExpHeap.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "d/actor/d_a_alink.h"
#include "d/d_select_cursor.h"
#include "d/d_menu_fishing.h"
#include "d/d_menu_insect.h"
#include "d/d_menu_letter.h"
#include "d/d_menu_option.h"
#include "d/d_menu_save.h"
#include "d/d_menu_skill.h"
#include "d/d_meter_HIO.h"
#include "d/d_msg_class.h"
#include "d/d_msg_object.h"
#include "d/d_msg_string.h"
#include "d/d_pane_class.h"
#include "d/d_item.h"
#include "d/d_lib.h"
#include "d/d_meter2_info.h"
#include "dolphin/os.h"
#include "m_Do/m_Do_graphic.h"
#include "m_Do/m_Do_mtx.h"
#include "JSystem/J2DGraph/J2DAnmLoader.h"
#include "JSystem/J2DGraph/J2DGrafContext.h"
#include "d/d_menu_window.h"
#include "JSystem/J3DGraphBase/J3DMaterial.h"
typedef void (dMenu_Collect2D_c::*initFunc)();
static initFunc init[] = {
&dMenu_Collect2D_c::wait_init, &dMenu_Collect2D_c::save_open_init,
&dMenu_Collect2D_c::save_move_init, &dMenu_Collect2D_c::save_close_init,
&dMenu_Collect2D_c::option_open_init, &dMenu_Collect2D_c::option_move_init,
&dMenu_Collect2D_c::option_close_init, &dMenu_Collect2D_c::letter_open_init,
&dMenu_Collect2D_c::letter_move_init, &dMenu_Collect2D_c::letter_close_init,
&dMenu_Collect2D_c::fishing_open_init, &dMenu_Collect2D_c::fishing_move_init,
&dMenu_Collect2D_c::fishing_close_init, &dMenu_Collect2D_c::skill_open_init,
&dMenu_Collect2D_c::skill_move_init, &dMenu_Collect2D_c::skill_close_init,
&dMenu_Collect2D_c::insect_open_init, &dMenu_Collect2D_c::insect_move_init,
&dMenu_Collect2D_c::insect_close_init};
typedef void (dMenu_Collect2D_c::*processFunc)();
static processFunc process[] = {
&dMenu_Collect2D_c::wait_proc, &dMenu_Collect2D_c::save_open_proc,
&dMenu_Collect2D_c::save_move_proc, &dMenu_Collect2D_c::save_close_proc,
&dMenu_Collect2D_c::option_open_proc, &dMenu_Collect2D_c::option_move_proc,
&dMenu_Collect2D_c::option_close_proc, &dMenu_Collect2D_c::letter_open_proc,
&dMenu_Collect2D_c::letter_move_proc, &dMenu_Collect2D_c::letter_close_proc,
&dMenu_Collect2D_c::fishing_open_proc, &dMenu_Collect2D_c::fishing_move_proc,
&dMenu_Collect2D_c::fishing_close_proc, &dMenu_Collect2D_c::skill_open_proc,
&dMenu_Collect2D_c::skill_move_proc, &dMenu_Collect2D_c::skill_close_proc,
&dMenu_Collect2D_c::insect_open_proc, &dMenu_Collect2D_c::insect_move_proc,
&dMenu_Collect2D_c::insect_close_proc,
};
/* 801AFD48-801AFE34 1AA688 00EC+00 1/1 0/0 0/0 .text
* __ct__17dMenu_Collect2D_cFP10JKRExpHeapP9STControlP10CSTControl */
dMenu_Collect2D_c::dMenu_Collect2D_c(JKRExpHeap* param_0, STControl* param_1, CSTControl* param_2) {
mpHeap = param_0;
mpStick = param_1;
mpCStick = param_2;
field_0xc = NULL;
mIsWolf = daPy_py_c::checkNowWolf();
mLinkGlobalCenterPos.set(0.0f, 0.0f, 0.0f);
for (int i = 0; i < 2; i++) {
field_0x44[i] = 1.0f;
field_0x4c[i] = 1.0f;
}
mBlueSmokePosX = 0.0f;
mBlueSmokePosY = 0.0f;
mBlueSmokeScale = 1.0f;
mBlueSmokeAlpha = 1.0f;
mHeartVesselPosX = 0.0f;
mHeartVesselPosY = 0.0f;
mHeartVesselScale = 1.0f;
mHeartPiecePosX = 0.0f;
mHeartPiecePosY = 0.0f;
mHeartPieceScale = 1.0f;
mpSubHeap = JKRCreateExpHeap(0x00046000, mpHeap, 0);
}
/* 801AFE34-801AFEA4 1AA774 0070+00 1/0 0/0 0/0 .text __dt__17dMenu_Collect2D_cFv */
dMenu_Collect2D_c::~dMenu_Collect2D_c() {
if (mpSubHeap) {
mDoExt_destroyExpHeap(mpSubHeap);
mpSubHeap = NULL;
}
}
/* 801AFEA4-801B0100 1AA7E4 025C+00 1/1 0/0 0/0 .text _create__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::_create() {
mpHeap->getTotalFreeSize();
mpScreen = new J2DScreen();
mpScreen->setPriority("zelda_collect_soubi_screen.blo", 0x1020000,
dComIfGp_getCollectResArchive());
dPaneClass_showNullPane(mpScreen);
mpScreenIcon = new J2DScreen();
mpScreenIcon->setPriority("zelda_collect_soubi_do_icon_parts.blo", 0x20000,
dComIfGp_getCollectResArchive());
for (int i = 0; i < 2; i++) {
mpButtonAB[i] = NULL;
mpButtonText[i] = NULL;
}
dPaneClass_showNullPane(mpScreenIcon);
mpDraw2DTop = new dMenu_Collect2DTop_c(this);
ResTIMG* image = (ResTIMG*)dComIfGp_getMain2DArchive()->getResource('TIMG', "tt_block8x8.bti");
mpBlackTex = new J2DPicture(image);
mpBlackTex->setBlackWhite(JUtility::TColor(0, 0, 0, 0), JUtility::TColor(0, 0, 0, 255));
mpBlackTex->setAlpha(0);
mpDrawCursor = new dSelect_cursor_c(2, 1.0f, NULL);
mpString = new dMsgString_c();
mpSaveScrn = NULL;
mpOptionScrn = NULL;
mpLetterScrn = NULL;
mpFishingScrn = NULL;
mpSkillScrn = NULL;
mpInsectScrn = NULL;
mProcess = 0;
animationSet();
screenSet();
initialize();
setHIO(true);
}
/* 801B0100-801B0570 1AAA40 0470+00 1/1 0/0 0/0 .text _delete__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::_delete() {
mpHeap->getTotalFreeSize();
dMeter2Info_setCollectCursorPosXY(mCursorX, mCursorY);
delete mpScreen;
mpScreen = NULL;
delete mpScreenIcon;
mpScreenIcon = NULL;
for (int i = 0; i < 2; i++) {
if (mpButtonAB[i]) {
delete mpButtonAB[i];
mpButtonAB[i] = NULL;
}
if (mpButtonText[i]) {
delete mpButtonText[i];
mpButtonText[i] = NULL;
}
}
delete mpDraw2DTop;
mpDraw2DTop = NULL;
delete mpBlackTex;
mpBlackTex = NULL;
delete mpDrawCursor;
mpDrawCursor = NULL;
delete mpString;
mpString = NULL;
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (mpSaveScrn) {
mpSaveScrn->_delete();
delete mpSaveScrn;
mpSaveScrn = NULL;
mpSubHeap->freeAll();
}
if (mpOptionScrn) {
mpOptionScrn->_delete();
delete mpOptionScrn;
mpOptionScrn = NULL;
mpSubHeap->freeAll();
}
if (mpLetterScrn) {
delete mpLetterScrn;
mpLetterScrn = NULL;
mpSubHeap->freeAll();
}
if (mpFishingScrn) {
delete mpFishingScrn;
mpFishingScrn = NULL;
mpSubHeap->freeAll();
}
if (mpSkillScrn) {
delete mpSkillScrn;
mpSkillScrn = NULL;
mpSubHeap->freeAll();
}
if (mpInsectScrn) {
delete mpInsectScrn;
mpInsectScrn = NULL;
mpSubHeap->freeAll();
}
mDoExt_setCurrentHeap(heap);
delete mpAnmKey;
mpAnmKey = NULL;
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 6; j++) {
if (mpSelPm[i][j]) {
delete mpSelPm[i][j];
mpSelPm[i][j] = NULL;
}
}
}
delete mpLinkPm;
mpLinkPm = NULL;
delete mpMaskPm;
mpMaskPm = NULL;
delete mpModelBg;
mpModelBg = NULL;
delete mpHeartParent;
mpHeartParent = NULL;
delete mpHeartPiece;
mpHeartPiece = NULL;
dComIfGp_getCollectResArchive()->removeResourceAll();
}
/* 801B0570-801B05A8 1AAEB0 0038+00 1/1 0/0 0/0 .text initialize__17dMenu_Collect2D_cFv
*/
void dMenu_Collect2D_c::initialize() {
(this->*init[mProcess])();
}
/* 801B05A8-801B061C 1AAEE8 0074+00 2/2 0/0 0/0 .text isFishIconVisible__17dMenu_Collect2D_cFv */
bool dMenu_Collect2D_c::isFishIconVisible() {
if (dComIfGs_getFishNum(0) || dComIfGs_getFishNum(1) || dComIfGs_getFishNum(2) ||
dComIfGs_getFishNum(3) || dComIfGs_getFishNum(4) || dComIfGs_getFishNum(5) ||
g_drawHIO.mFishListScreen.mDebug)
{
return true;
}
return false;
}
/* 801B061C-801B071C 1AAF5C 0100+00 2/2 0/0 0/0 .text isSkillIconVisible__17dMenu_Collect2D_cFv */
bool dMenu_Collect2D_c::isSkillIconVisible() {
/* dSv_event_flag_c::F_0338 - Secret techniques - Obtained 1 secret techinques - Shield attack */
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[338]) ||
/* dSv_event_flag_c::F_0339 - Secret techniques - Obtained 2 secret techinques */
dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[339]) ||
/* dSv_event_flag_c::F_0340 - Secret techniques - Obtained 3 secret techinques */
dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[340]) ||
/* dSv_event_flag_c::F_0341 - Secret techniques - Obtained 4 secret techinques */
dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[341]) ||
/* dSv_event_flag_c::F_0342 - Secret techniques - Obtained 5 secret techinques */
dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[342]) ||
/* dSv_event_flag_c::F_0343 - Secret techniques - Obtained 6 secret techinques */
dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[343]) ||
/* dSv_event_flag_c::F_0344 - Secret techniques - Obtained 7 secret techinques */
dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[344]))
{
return true;
}
return false;
}
/* 801B071C-801B074C 1AB05C 0030+00 2/2 0/0 0/0 .text isInsectIconVisible__17dMenu_Collect2D_cFv
*/
bool dMenu_Collect2D_c::isInsectIconVisible() {
return dMenu_Insect_c::getGetInsectNum();
}
static u8 const lit_3778[12] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* 801B074C-801B1C3C 1AB08C 14F0+00 1/1 0/0 0/0 .text screenSet__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::screenSet() {
static const u64 text_sv[3] = {'sav_0', 'sav_1', 'sav_2'};
static const u64 text_op[3] = {'opt_0', 'opt_1', 'opt_2',};
static const u64 ftext_sv[3] = {'f_sav_0', 'f_sav_1', 'f_sav_2'};
static const u64 ftext_op[3] = {'f_opt_0', 'f_opt_1', 'f_opt_2'};
static const u64 text_a_tag[5] = {'atext1_1', 'atext1_2', 'atext1_3', 'atext1_4', 'atext1_5'};
static const u64 text_b_tag[5] = {'btext1_1', 'btext1_2', 'btext1_3', 'btext1_4', 'btext1_5'};
static_cast<J2DTextBox*>(mpScreen->search('f_t00'))->setFont(mDoExt_getRubyFont());
static_cast<J2DTextBox*>(mpScreen->search('f_t00'))->setString(0x20, "");
dMeter2Info_getStringKanji(
0x3E1, static_cast<J2DTextBox*>(mpScreen->search('f_t00'))->getStringPtr(), NULL);
mpScreen->search('t_t00')->hide();
for (int i = 0; i < 3; i++) {
static_cast<J2DTextBox*>(mpScreen->search(ftext_sv[i]))->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpScreen->search(ftext_op[i]))->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpScreen->search(ftext_sv[i]))->setString(0x20, "");
static_cast<J2DTextBox*>(mpScreen->search(ftext_op[i]))->setString(0x20, "");
dMeter2Info_getStringKanji(
0x60, static_cast<J2DTextBox*>(mpScreen->search(ftext_sv[i]))->getStringPtr(), NULL);
dMeter2Info_getStringKanji(
0x5F, static_cast<J2DTextBox*>(mpScreen->search(ftext_op[i]))->getStringPtr(), NULL);
mpScreen->search(text_sv[i])->hide();
mpScreen->search(text_op[i])->hide();
}
for (int i = 0; i < 5; i++) {
static_cast<J2DTextBox*>(mpScreenIcon->search(text_a_tag[i]))
->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpScreenIcon->search(text_b_tag[i]))
->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpScreenIcon->search(text_a_tag[i]))->setString(0x20, "");
static_cast<J2DTextBox*>(mpScreenIcon->search(text_b_tag[i]))->setString(0x20, "");
}
static_cast<J2DTextBox*>(mpScreen->search('item_n04'))->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpScreen->search('item_n05'))->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpScreen->search('item_n06'))->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpScreen->search('item_n07'))->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpScreen->search('item_n04'))->setString(0x20, "");
static_cast<J2DTextBox*>(mpScreen->search('item_n05'))->setString(0x20, "");
static_cast<J2DTextBox*>(mpScreen->search('item_n06'))->setString(0x20, "");
static_cast<J2DTextBox*>(mpScreen->search('item_n07'))->setString(0x20, "");
static_cast<J2DTextBox*>(mpScreen->search('f_text1'))->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpScreen->search('f_text0'))->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpScreen->search('f_text1'))->setString(0x100, "");
static_cast<J2DTextBox*>(mpScreen->search('f_text0'))->setString(0x100, "");
mpScreen->search('item_n00')->hide();
mpScreen->search('item_n01')->hide();
mpScreen->search('item_n02')->hide();
mpScreen->search('item_n03')->hide();
mpScreen->search('i_text1')->hide();
mpScreen->search('i_text0')->hide();
field_0x22d[0][0] = 0;
field_0x22d[1][0] = 0;
field_0x22d[2][0] = 0;
field_0x22d[3][0] = dComIfGs_isItemFirstBit(0x28) ||
(dComIfGs_isItemFirstBit(0x3F)
/* dSv_event_flag_c::F_0026 - Ordon Village - gave wooden sword to talo on 3rd day */
&& !dComIfGs_isEventBit(0x302)) ?
true :
false;
if (field_0x22d[3][0] != 0) {
if (dComIfGs_isItemFirstBit(0x28)) {
mpScreen->search('ken_00')->hide();
mpScreen->search('ken_01')->show();
} else if (dComIfGs_isItemFirstBit(0x3F)
/* dSv_event_flag_c::F_0026 - Ordon Village - gave wooden sword to talo on 3rd day */
&& !dComIfGs_isEventBit(0x302)) {
mpScreen->search('ken_00')->show();
mpScreen->search('ken_01')->hide();
}
}
field_0x22d[4][0] =
dComIfGs_isItemFirstBit(0x29) || dComIfGs_isItemFirstBit(0x49) ? true : false;
if (dComIfGs_getMaxLife() > 15) {
field_0x22d[5][0] = 1;
} else {
field_0x22d[5][0] = 0;
}
field_0x22d[6][0] = dMenu_Collect3D_c::getMaskMdlVisible();
field_0x22d[0][1] = 0;
field_0x22d[1][1] = 0;
field_0x22d[2][1] = 0;
field_0x22d[3][1] =
dComIfGs_isItemFirstBit(0x2B) || dComIfGs_isItemFirstBit(0x2A) ? true : false;
if (field_0x22d[3][1] != 0) {
if (dComIfGs_isItemFirstBit(0x2B)) {
mpScreen->search('tate_00')->show();
mpScreen->search('tate_01')->hide();
} else if (dComIfGs_isItemFirstBit(0x2A)) {
mpScreen->search('tate_00')->hide();
mpScreen->search('tate_01')->show();
}
}
field_0x22d[4][1] = dComIfGs_isItemFirstBit(0x2C);
field_0x22d[5][1] = 0;
field_0x22d[6][1] = 0;
field_0x22d[0][2] = 0;
field_0x22d[1][2] = 0;
field_0x22d[2][2] = 0;
if (dComIfGs_getSelectEquipClothes() == fpcNm_ITEM_WEAR_CASUAL) {
field_0x22d[3][2] = 0;
field_0x22d[4][2] = 0;
field_0x22d[5][2] = 0;
} else {
field_0x22d[3][2] = dComIfGs_isItemFirstBit(0x2F);
field_0x22d[4][2] = dComIfGs_isItemFirstBit(0x31);
field_0x22d[5][2] = dComIfGs_isItemFirstBit(0x30);
}
field_0x22d[6][2] = 0;
field_0x22d[0][3] = 1;
if (checkItemGet(fpcNm_ITEM_BOW, 1)) {
field_0x22d[1][3] = 1;
} else {
field_0x22d[1][3] = 0;
}
if (isInsectIconVisible()) {
field_0x22d[2][3] = 1;
} else {
field_0x22d[2][3] = 0;
}
field_0x22d[3][3] = isSkillIconVisible();
field_0x22d[4][3] = 0;
field_0x22d[5][3] = 0;
field_0x22d[6][3] = 0;
if (dComIfGs_getCollectSmell() != fpcNm_ITEM_NONE) {
field_0x22d[0][4] = 1;
} else {
field_0x22d[0][4] = 0;
}
field_0x22d[1][4] = dComIfGs_getPohSpiritNum();
if (isFishIconVisible()) {
field_0x22d[2][4] = 1;
} else {
field_0x22d[2][4] = 0;
}
if (g_drawHIO.mLetterSelectScreen.mLetterNum > 0) {
field_0x22d[3][4] = 1;
} else {
if (dMeter2Info_getRecieveLetterNum()) {
field_0x22d[3][4] = 1;
} else {
field_0x22d[3][4] = 0;
}
}
field_0x22d[4][4] = 0;
field_0x22d[5][4] = 0;
field_0x22d[6][4] = 0;
field_0x22d[0][5] = 1;
field_0x22d[1][5] = 1;
field_0x22d[2][5] = 0;
field_0x22d[3][5] = 0;
field_0x22d[4][5] = 0;
field_0x22d[5][5] = 0;
field_0x22d[6][5] = 0;
field_0x184[0][0] = 0;
field_0x184[1][0] = 0;
field_0x184[2][0] = 0;
if (dComIfGs_isItemFirstBit(0x28)) {
field_0x184[3][0] = 0x18d;
} else {
field_0x184[3][0] = 0x1a4;
}
if (dComIfGs_isItemFirstBit(0x49)) {
field_0x184[4][0] = 0x1ae;
} else {
field_0x184[4][0] = 0x18e;
}
field_0x184[5][0] = 0x186;
if (field_0x22d[6][0] == 2) {
if (dMenu_Collect3D_c::getMirrorNum() >= 4) {
field_0x184[6][0] = 0x20c;
} else {
if (dMenu_Collect3D_c::getMirrorNum() >= 2) {
field_0x184[6][0] = 0x20b;
} else {
field_0x184[6][0] = 0x20a;
}
}
} else {
if (dMenu_Collect3D_c::getCrystalNum() <= 1) {
field_0x184[6][0] = 0x5aa;
} else {
field_0x184[6][0] = 0x5ab;
}
}
field_0x184[0][1] = 0;
field_0x184[1][1] = 0;
field_0x184[2][1] = 0;
if (dComIfGs_isItemFirstBit(0x2B)) {
field_0x184[3][1] = 0x190;
} else {
field_0x184[3][1] = 0x18f;
}
field_0x184[4][1] = 0x191;
field_0x184[5][1] = 0x192;
field_0x184[6][1] = 0;
field_0x184[0][2] = 0;
field_0x184[1][2] = 0;
field_0x184[2][2] = 0;
field_0x184[3][2] = 0x194;
field_0x184[4][2] = 0x196;
field_0x184[5][2] = 0x195;
field_0x184[6][2] = 0;
if (dComIfGs_getRupeeMax() == WALLET_MAX) {
field_0x184[0][3] = 0x199;
} else if (dComIfGs_getRupeeMax() == BIG_WALLET_MAX) {
field_0x184[0][3] = 0x19a;
} else {
field_0x184[0][3] = 0x19b;
}
if (dComIfGs_getArrowMax() == QUIVER_MAX) {
field_0x184[1][3] = 0x1b9;
} else if (dComIfGs_getArrowMax() == BIG_QUIVER_MAX) {
field_0x184[1][3] = 0x1ba;
} else {
field_0x184[1][3] = 0x1bb;
}
field_0x184[2][3] = 0x5b8;
field_0x184[3][3] = 0x5b0;
field_0x184[4][3] = 0;
field_0x184[5][3] = 0;
field_0x184[6][3] = 0;
field_0x184[0][4] = dMsgObject_getSmellTypeMessageID();
field_0x184[1][4] = 0x245;
field_0x184[2][4] = 0x5a1;
field_0x184[3][4] = 0x4c8;
field_0x184[4][4] = 0;
field_0x184[5][4] = 0;
field_0x184[6][4] = 0;
field_0x184[0][5] = 0x60;
field_0x184[1][5] = 0x5f;
field_0x184[2][5] = 0;
field_0x184[3][5] = 0;
field_0x184[4][5] = 0;
field_0x184[5][5] = 0;
field_0x184[6][5] = 0;
field_0x1d8[0][0] = 0;
field_0x1d8[1][0] = 0;
field_0x1d8[2][0] = 0;
field_0x1d8[3][0] = field_0x184[3][0] + 0x100;
field_0x1d8[4][0] = field_0x184[4][0] + 0x100;
field_0x1d8[5][0] = field_0x184[5][0] + 0x100;
if (field_0x22d[6][0] == 2) {
if (dMenu_Collect3D_c::getMirrorNum() >= 4) {
field_0x1d8[6][0] = 0x30c;
} else {
if (dMenu_Collect3D_c::getMirrorNum() >= 2) {
field_0x1d8[6][0] = 0x30b;
} else {
field_0x1d8[6][0] = 0x30a;
}
}
} else {
if (dMenu_Collect3D_c::getCrystalNum() <= 1) {
field_0x1d8[6][0] = 0x5ac;
} else {
field_0x1d8[6][0] = 0x5ad;
}
}
field_0x1d8[0][1] = 0;
field_0x1d8[1][1] = 0;
field_0x1d8[2][1] = 0;
field_0x1d8[3][1] = field_0x184[3][1] + 0x100;
field_0x1d8[4][1] = field_0x184[4][1] + 0x100;
field_0x1d8[5][1] = field_0x184[5][1] + 0x100;
field_0x1d8[6][1] = 0;
field_0x1d8[0][2] = 0;
field_0x1d8[1][2] = 0;
field_0x1d8[2][2] = 0;
field_0x1d8[3][2] = field_0x184[3][2] + 0x100;
field_0x1d8[4][2] = field_0x184[4][2] + 0x100;
field_0x1d8[5][2] = field_0x184[5][2] + 0x100;
field_0x1d8[6][2] = 0;
field_0x1d8[0][3] = field_0x184[0][3] + 0x100;
field_0x1d8[1][3] = field_0x184[1][3] + 0x100;
field_0x1d8[2][3] = 0x5b9;
field_0x1d8[3][3] = 0x5b1;
field_0x1d8[4][3] = 0;
field_0x1d8[5][3] = 0;
field_0x1d8[6][3] = 0;
field_0x1d8[0][4] = dMsgObject_getSmellTypeMessageID() + 0x100;
/* dSv_event_flag_c::F_0456 - Castle Town - First time meeting with Jovani */
if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[456])) {
field_0x1d8[1][4] = 0x12d8;
} else {
field_0x1d8[1][4] = field_0x184[1][4] + 0x100;
}
field_0x1d8[2][4] = 0x5a2;
field_0x1d8[3][4] = 0x4c9;
field_0x1d8[4][4] = 0;
field_0x1d8[5][4] = 0;
field_0x1d8[6][4] = 0;
field_0x1d8[0][5] = 0x4c5;
field_0x1d8[1][5] = 0x4c6;
field_0x1d8[2][5] = 0;
field_0x1d8[3][5] = 0;
field_0x1d8[4][5] = 0;
field_0x1d8[5][5] = 0;
field_0x1d8[6][5] = 0;
mCursorX = dMeter2Info_getCollectCursorPosX();
mCursorY = dMeter2Info_getCollectCursorPosY();
if (dMenu_Collect3D_c::getMaskMdlVisible() == 0) {
if (mCursorX == 6 && mCursorY == 0) {
mCursorX = 3;
mCursorY = 0;
}
}
field_0x259 = mCursorX;
field_0x25a = mCursorY;
mCurrentAString = 0;
mCurrentBString = 0;
field_0x180 = 0;
mItemNameString = 0;
mEquippedSword = 0xff;
mEquippedShield = 0xff;
mEquippedClothes = 0xff;
mSubWindowOpenCheck = 0;
field_0x25f = 0;
field_0x260 = 0xff;
field_0x261 = 0xff;
setEquipItemFrameColorSword(-1);
setEquipItemFrameColorShield(-1);
setEquipItemFrameColorClothes(-1);
u8 i_copy;
u8 j_copy;
bool bVar18 = false;
bool bVar2 = false;
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 6; j++) {
if (getItemTag(i, j, true)) {
mpSelPm[i][j] = new CPaneMgr(mpScreen, getItemTag(i, j, true), 0, NULL);
if (!bVar18) {
i_copy = i;
j_copy = j;
bVar18 = true;
}
if (!bVar2) {
if (mCursorX == i && mCursorY == j) {
bVar2 = true;
}
}
} else {
mpSelPm[i][j] = NULL;
}
if (getItemTag(i, j, false)) {
if (field_0x22d[i][j] != 0 || (i == 5 && j == 0)) {
mpScreen->search(getItemTag(i, j, false))->show();
} else {
mpScreen->search(getItemTag(i, j, false))->hide();
}
}
}
}
if (!bVar2) {
mCursorX = i_copy;
mCursorY = j_copy;
}
mpLinkPm = new CPaneMgr(mpScreen, 'linki_n', 0, NULL);
mLinkGlobalCenterPos.x = mpLinkPm->getInitGlobalCenterPosX();
mLinkGlobalCenterPos.y = mpLinkPm->getInitGlobalCenterPosY();
mLinkGlobalCenterPos.z = -1000.0f;
mpMaskPm = new CPaneMgr(mpScreen, 'kamen_n', 0, NULL);
mpModelBg = new CPaneMgr(mpScreen, 'modelbgn', 2, NULL);
mpHeartParent = new CPaneMgr(mpScreen, 'heart_n', 0, NULL);
mpHeartPiece = new CPaneMgr(mpScreen, 'heart_kn', 0, NULL);
setAButtonString(mCurrentAString);
setBButtonString(mCurrentBString);
setItemNameString(mCursorX, mCursorY);
cursorPosSet();
setArrowMaxNum(dComIfGs_getArrowMax());
setWalletMaxNum(dComIfGs_getRupeeMax());
setSmellType();
setHeartPiece();
setPohMaxNum(dComIfGs_getPohSpiritNum());
}
/* 801B1C3C-801B1CE0 1AC57C 00A4+00 1/1 0/0 0/0 .text animationSet__17dMenu_Collect2D_cFv
*/
void dMenu_Collect2D_c::animationSet() {
OSInitFastCast();
void* resource =
JKRGetNameResource("zelda_collect_soubi_screen.btk", dComIfGp_getCollectResArchive());
mpAnmKey = (J2DAnmTextureSRTKey*)J2DAnmLoaderDataBase::load(resource);
mpAnmKey->searchUpdateMaterialID(mpScreen);
field_0x34 = 0.0f;
mFrame = 0.0f;
field_0x3c = 0.0f;
}
/* 801B1CE0-801B1EDC 1AC620 01FC+00 1/1 0/0 0/0 .text
* btkAnimeLoop0__17dMenu_Collect2D_cFP19J2DAnmTextureSRTKey */
void dMenu_Collect2D_c::btkAnimeLoop0(J2DAnmTextureSRTKey* i_SRTKey) {
if (i_SRTKey != NULL) {
mFrame++;
if (mFrame >= i_SRTKey->getFrameMax()) {
mFrame -= i_SRTKey->getFrameMax();
}
i_SRTKey->setFrame(mFrame);
} else {
mFrame = 0.0f;
}
static_cast<J2DTextBox*>(mpScreen->search('modelbg0'))->setAnimation(i_SRTKey);
static_cast<J2DTextBox*>(mpScreen->search('modelbg1'))->setAnimation(i_SRTKey);
static_cast<J2DTextBox*>(mpScreen->search('modelbg2'))->setAnimation(i_SRTKey);
static_cast<J2DTextBox*>(mpScreen->search('modelbg3'))->setAnimation(i_SRTKey);
static_cast<J2DTextBox*>(mpScreen->search('modelbg4'))->setAnimation(i_SRTKey);
static_cast<J2DTextBox*>(mpScreen->search('modelbg5'))->setAnimation(i_SRTKey);
}
/* 801B1EDC-801B1FAC 1AC81C 00D0+00 1/1 0/0 0/0 .text setBackAlpha__17dMenu_Collect2D_cFv
*/
void dMenu_Collect2D_c::setBackAlpha() {
f32 alpha = mpBlackTex->getAlpha() / 150.0f;
switch (mProcess) {
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
case 17:
case 18:
if (alpha < 1.0f) {
alpha += 0.2f;
}
if (alpha > 1.0f) {
alpha = 1.0f;
}
break;
default:
if (alpha > 0.0f) {
alpha -= 0.2f;
}
if (alpha < 0.0f) {
alpha = 0.0f;
}
break;
}
mpBlackTex->setAlpha(alpha * 150.0f);
}
/* 801B1FAC-801B27EC 1AC8EC 0840+00 1/1 0/0 0/0 .text cursorMove__17dMenu_Collect2D_cFv
*/
// Not sure if this works without gotos
void dMenu_Collect2D_c::cursorMove() {
u8 dVar1 = mCursorX;
u8 dVar2 = mCursorY;
mpStick->checkTrigger();
if (mpStick->checkRightTrigger()) {
if (mCursorX < 6) {
if (mCursorX == 0 && mCursorY == 0 &&
field_0x259 >= 3 && field_0x25a < 3)
{
mCursorX = field_0x259;
mCursorY = field_0x25a;
} else {
do {
mCursorX++;
if (mCursorX == 6 && mCursorY < 3) {
if (field_0x22d[6][0] != 0) {
if (getItemTag(6, 0, false) && field_0x22d[6][0] != 0) {
mCursorX = 6;
mCursorY = 0;
}
} else {
mCursorX = dVar1;
mCursorY = dVar2;
goto LAB_802ba744;
}
}
if (dVar1 == 4 && dVar2 == 1) {
mCursorX = 5;
mCursorY = 0;
goto LAB_802ba744;
}
if (getItemTag(mCursorX, mCursorY, true)) {
goto LAB_802ba744;
}
} while (mCursorX < 6);
mCursorX = dVar1;
}
}
} else {
if (mpStick->checkLeftTrigger() && mCursorX != 0) {
if (mCursorX == 6 &&
mCursorY == 0 && field_0x259 >= 3 &&
field_0x25a < 3)
{
mCursorX = field_0x259;
mCursorY = field_0x25a;
} else if (dVar1 == 5 && dVar2 == 0 &&
field_0x259 == 4 &&
field_0x25a == 1)
{
mCursorX = field_0x259;
mCursorY = field_0x25a;
} else {
do {
mCursorX--;
if (getItemTag(mCursorX, mCursorY, true)) {
goto LAB_802ba744;
}
} while (mCursorX != 0);
mCursorX = dVar1;
}
}
}
LAB_802ba744:
if (mpStick->checkUpTrigger()) {
if (mCursorY != 0) {
begin:
mCursorY--;
if (mCursorY == 2) {
u8 local_3c[9] = {3,3,4,3,4,5,4,5,5};
u8 local_48[9] = {2,1,2,0,1,2,0,1,0};
for (int i = 0; i < 9; i++) {
if (getItemTag(local_3c[i], local_48[i], true)) {
mCursorX = local_3c[i];
mCursorY = local_48[i];
break;
}
}
}
if (dVar2 == 5) {
if (dVar1 == 0) {
if (field_0x25a < 5) {
mCursorX = field_0x259;
mCursorY = field_0x25a;
goto LAB_802bab54;
} else {
bool bVar3 = false;
for (int i = 0; i < 4; i++) {
if (getItemTag(i, mCursorY, true)) {
mCursorX = i;
bVar3 = true;
break;
}
}
if (mCursorY == 0) {
mCursorX = dVar1;
mCursorY = dVar2;
bVar3 = true;
}
if (bVar3) {
goto LAB_802bab54;
}
}
} else if (field_0x25a < 5) {
mCursorX = field_0x259;
mCursorY = field_0x25a;
goto LAB_802bab54;
} else {
bool bVar4 = false;
for (int i = 3; i < 7; i++) {
if (getItemTag(i, mCursorY, true)) {
mCursorX = i;
bVar4 = true;
break;
}
}
if (mCursorY == 0) {
mCursorX = dVar1;
mCursorY = dVar2;
bVar4 = true;
}
if (bVar4) {
goto LAB_802bab54;
}
}
goto begin;
} else {
if (getItemTag(mCursorX, mCursorY, true)) {
goto LAB_802bab54;
}
if (mCursorY != 0) {
goto begin;
}
mCursorY = dVar2;
}
}
} else if (mpStick->checkDownTrigger()) {
if (mCursorY < 4) {
do {
mCursorY++;
if (mCursorY == 3) {
u8 local_50[8] = {3, 2, 3, 1, 2, 0, 1, 0};
u8 local_58[8] = {3, 3, 4, 3, 4, 3, 4, 4};
for (int i = 0; i < 8; i++) {
if (getItemTag(local_50[i], local_58[i], true)) {
mCursorX = local_50[i];
mCursorY = local_58[i];
break;
}
}
}
if (getItemTag(mCursorX, mCursorY, true)) {
goto LAB_802bab54;
}
} while (mCursorY < 4);
mCursorY = 5;
if (mCursorX <= 2) {
mCursorX = 0;
} else {
mCursorX = 1;
}
} else if (mCursorY == 4) {
mCursorY = 5;
if (mCursorX <= 3) {
mCursorX = 0;
} else {
mCursorX = 1;
}
}
}
LAB_802bab54:
if (mCursorX != dVar1 || mCursorY != dVar2) {
field_0x259 = dVar1;
field_0x25a = dVar2;
if ((mCursorX == 1 && mCursorY == 5) || (mCursorX == 0 && mCursorY == 5)) {
Z2GetAudioMgr()->seStart(Z2SE_SY_CURSOR_OPTION, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f,
0);
} else {
Z2GetAudioMgr()->seStart(Z2SE_SY_CURSOR_ITEM, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
}
cursorPosSet();
setItemNameString(mCursorX, mCursorY);
}
if (field_0x44[0] != g_drawHIO.mCollectScreen.mUnselectItemScale ||
field_0x44[1] != g_drawHIO.mCollectScreen.mSelectItemScale ||
field_0x4c[0] != g_drawHIO.mCollectScreen.mUnselectSaveOptionScale ||
field_0x4c[1] != g_drawHIO.mCollectScreen.mSelectSaveOptionScale)
{
field_0x44[0] = g_drawHIO.mCollectScreen.mUnselectItemScale;
field_0x44[1] = g_drawHIO.mCollectScreen.mSelectItemScale;
field_0x4c[0] = g_drawHIO.mCollectScreen.mUnselectSaveOptionScale;
field_0x4c[1] = g_drawHIO.mCollectScreen.mSelectSaveOptionScale;
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 6; j++) {
if (getItemTag(i, j, true)) {
J2DPane* pane = mpScreen->search(getItemTag(i, j, true));
if ((i != 0 || j != 0) && (i != 6 || j != 0)) {
if (j == 5) {
if (i == mCursorX && j == mCursorY) {
pane->scale(g_drawHIO.mCollectScreen.mSelectSaveOptionScale,
g_drawHIO.mCollectScreen.mSelectSaveOptionScale);
} else {
pane->scale(g_drawHIO.mCollectScreen.mUnselectSaveOptionScale,
g_drawHIO.mCollectScreen.mUnselectSaveOptionScale);
}
} else if (i == mCursorX && j == mCursorY) {
pane->scale(g_drawHIO.mCollectScreen.mSelectItemScale,
g_drawHIO.mCollectScreen.mSelectItemScale);
} else {
pane->scale(g_drawHIO.mCollectScreen.mUnselectItemScale,
g_drawHIO.mCollectScreen.mUnselectItemScale);
}
}
}
}
}
}
}
/* 801B27EC-801B2A74 1AD12C 0288+00 2/2 0/0 0/0 .text cursorPosSet__17dMenu_Collect2D_cFv
*/
void dMenu_Collect2D_c::cursorPosSet() {
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 6; j++) {
if (getItemTag(i, j, true) != 0) {
J2DPane* itemTag = mpScreen->search(getItemTag(i, j, true));
if ((i != 0 || j != 0) && (i != 6 || j != 0)) {
if (j == 5) {
if (i == mCursorX && j == mCursorY) {
itemTag->scale(g_drawHIO.mCollectScreen.mSelectSaveOptionScale,
g_drawHIO.mCollectScreen.mSelectSaveOptionScale);
} else {
itemTag->scale(g_drawHIO.mCollectScreen.mUnselectSaveOptionScale,
g_drawHIO.mCollectScreen.mUnselectSaveOptionScale);
}
} else if (i == mCursorX && j == mCursorY) {
itemTag->scale(g_drawHIO.mCollectScreen.mSelectItemScale,
g_drawHIO.mCollectScreen.mSelectItemScale);
} else {
itemTag->scale(g_drawHIO.mCollectScreen.mUnselectItemScale,
g_drawHIO.mCollectScreen.mUnselectItemScale);
}
}
}
}
}
mpDrawCursor->setAlphaRate(1.0f);
Vec pos = mpSelPm[mCursorX][mCursorY]->getGlobalVtxCenter(false, 0);
mpDrawCursor->setPos(pos.x, pos.y, mpSelPm[mCursorX][mCursorY]->getPanePtr(), false);
if (mCursorY == 5) {
mpDrawCursor->setParam(1.1f, 0.85f, 0.05f, 0.5f, 0.5f);
} else if (mCursorX == 6 && mCursorY == 0) {
mpDrawCursor->setParam(0.6f, 0.85f, 0.03f, 0.6f, 0.6f);
} else {
mpDrawCursor->setParam(1.0f, 1.0f, 0.1f, 0.7f, 0.7f);
}
}
/* 801B2A74-801B2D00 1AD3B4 028C+00 1/1 0/0 0/0 .text changeSword__17dMenu_Collect2D_cFv
*/
void dMenu_Collect2D_c::changeSword() {
switch (mCursorX) {
case 3:
if (dComIfGs_isItemFirstBit(fpcNm_ITEM_SWORD)) {
if (dComIfGs_getSelectEquipSword() != fpcNm_ITEM_SWORD) {
dMeter2Info_setSword(fpcNm_ITEM_SWORD, false);
setEquipItemFrameColorSword(0);
mDoAud_seStart(Z2SE_SY_ITEM_SET_X, NULL, 0, 0);
dMeter2Info_set2DVibration();
}
} else if (dComIfGs_getSelectEquipSword() != fpcNm_ITEM_WOOD_STICK) {
dMeter2Info_setSword(fpcNm_ITEM_WOOD_STICK, false);
setEquipItemFrameColorSword(0);
Z2GetAudioMgr()->seStart(Z2SE_SY_ITEM_SET_X, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
dMeter2Info_set2DVibration();
}
break;
case 4:
if (dComIfGs_isItemFirstBit(fpcNm_ITEM_LIGHT_SWORD)) {
if (dComIfGs_getSelectEquipSword() != fpcNm_ITEM_LIGHT_SWORD) {
dMeter2Info_setSword(fpcNm_ITEM_LIGHT_SWORD, false);
setEquipItemFrameColorSword(1);
Z2GetAudioMgr()->seStart(Z2SE_SY_ITEM_SET_X, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f,
0);
dMeter2Info_set2DVibration();
}
} else if (dComIfGs_getSelectEquipSword() != fpcNm_ITEM_MASTER_SWORD) {
dMeter2Info_setSword(fpcNm_ITEM_MASTER_SWORD, false);
setEquipItemFrameColorSword(1);
Z2GetAudioMgr()->seStart(Z2SE_SY_ITEM_SET_X, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
dMeter2Info_set2DVibration();
}
break;
case 5:
if (dComIfGs_getSelectEquipSword() != fpcNm_ITEM_LIGHT_SWORD) {
dMeter2Info_setSword(fpcNm_ITEM_LIGHT_SWORD, false);
setEquipItemFrameColorSword(2);
Z2GetAudioMgr()->seStart(Z2SE_SY_ITEM_SET_X, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
dMeter2Info_set2DVibration();
}
break;
}
}
/* 801B2D00-801B2EE4 1AD640 01E4+00 1/1 0/0 0/0 .text changeShield__17dMenu_Collect2D_cFv
*/
void dMenu_Collect2D_c::changeShield() {
switch (mCursorX) {
case 3:
if (dComIfGs_isItemFirstBit(fpcNm_ITEM_SHIELD)) {
if (dComIfGs_getSelectEquipShield() != fpcNm_ITEM_SHIELD) {
dMeter2Info_setShield(fpcNm_ITEM_SHIELD, false);
setEquipItemFrameColorShield(0);
daAlink_getAlinkActorClass()->setShieldChange();
Z2GetAudioMgr()->seStart(Z2SE_SY_ITEM_SET_X, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f,
0);
dMeter2Info_set2DVibration();
}
} else if (dComIfGs_isItemFirstBit(fpcNm_ITEM_WOOD_SHIELD)) {
if (dComIfGs_getSelectEquipShield() != fpcNm_ITEM_WOOD_SHIELD) {
dMeter2Info_setShield(fpcNm_ITEM_WOOD_SHIELD, false);
setEquipItemFrameColorShield(0);
daAlink_getAlinkActorClass()->setShieldChange();
Z2GetAudioMgr()->seStart(Z2SE_SY_ITEM_SET_X, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f,
0);
dMeter2Info_set2DVibration();
}
}
break;
case 4:
if (dComIfGs_getSelectEquipShield() != fpcNm_ITEM_HYLIA_SHIELD) {
dMeter2Info_setShield(fpcNm_ITEM_HYLIA_SHIELD, false);
setEquipItemFrameColorShield(1);
daAlink_getAlinkActorClass()->setShieldChange();
Z2GetAudioMgr()->seStart(Z2SE_SY_ITEM_SET_X, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
dMeter2Info_set2DVibration();
}
break;
}
}
/* 801B2EE4-801B30C8 1AD824 01E4+00 1/1 0/0 0/0 .text changeClothe__17dMenu_Collect2D_cFv
*/
void dMenu_Collect2D_c::changeClothe() {
switch (mCursorX) {
case 3:
if (dComIfGs_getSelectEquipClothes() != fpcNm_ITEM_WEAR_KOKIRI) {
dMeter2Info_setCloth(fpcNm_ITEM_WEAR_KOKIRI, false);
setEquipItemFrameColorClothes(0);
daPy_getPlayerActorClass()->setClothesChange(0);
Z2GetAudioMgr()->seStart(Z2SE_SY_ITEM_SET_X, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
dMeter2Info_set2DVibration();
}
break;
case 4:
if (dComIfGs_getSelectEquipClothes() != fpcNm_ITEM_WEAR_ZORA) {
dMeter2Info_setCloth(fpcNm_ITEM_WEAR_ZORA, false);
setEquipItemFrameColorClothes(1);
daPy_getPlayerActorClass()->setClothesChange(0);
Z2GetAudioMgr()->seStart(Z2SE_SY_ITEM_SET_X, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
dMeter2Info_set2DVibration();
}
break;
case 5:
if (dComIfGs_getSelectEquipClothes() != fpcNm_ITEM_ARMOR) {
dMeter2Info_setCloth(fpcNm_ITEM_ARMOR, false);
setEquipItemFrameColorClothes(2);
daPy_getPlayerActorClass()->setClothesChange(0);
Z2GetAudioMgr()->seStart(Z2SE_SY_ITEM_SET_X, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0);
dMeter2Info_set2DVibration();
}
break;
}
}
/* 801B30C8-801B3340 1ADA08 0278+00 1/1 0/0 0/0 .text setArrowMaxNum__17dMenu_Collect2D_cFUc */
void dMenu_Collect2D_c::setArrowMaxNum(u8 param_0) {
switch (param_0) {
case 0:
mpScreen->search('item_0_0')->hide();
mpScreen->search('item_0_1')->hide();
mpScreen->search('item_0_2')->hide();
break;
case 30:
mpScreen->search('item_0_0')->show();
mpScreen->search('item_0_1')->hide();
mpScreen->search('item_0_2')->hide();
break;
case 60:
mpScreen->search('item_0_0')->hide();
mpScreen->search('item_0_1')->show();
mpScreen->search('item_0_2')->hide();
break;
case 100:
mpScreen->search('item_0_0')->hide();
mpScreen->search('item_0_1')->hide();
mpScreen->search('item_0_2')->show();
break;
}
}
/* 801B3340-801B3524 1ADC80 01E4+00 1/1 0/0 0/0 .text setWalletMaxNum__17dMenu_Collect2D_cFUs */
void dMenu_Collect2D_c::setWalletMaxNum(u16 i_walletSize) {
switch (i_walletSize) {
case 300:
mpScreen->search('item_1_0')->show();
mpScreen->search('item_1_1')->hide();
mpScreen->search('item_1_2')->hide();
break;
case 600:
mpScreen->search('item_1_0')->hide();
mpScreen->search('item_1_1')->show();
mpScreen->search('item_1_2')->hide();
break;
case 1000:
mpScreen->search('item_1_0')->hide();
mpScreen->search('item_1_1')->hide();
mpScreen->search('item_1_2')->show();
break;
}
}
/* 801B3524-801B3640 1ADE64 011C+00 1/1 0/0 0/0 .text setSmellType__17dMenu_Collect2D_cFv
*/
void dMenu_Collect2D_c::setSmellType() {
static const u64 smell_tag[5] = {
'wolf_med', 'wolf_chi', 'wolf_fis', 'wolf_iri', 'wolf_pou',
};
s32 smellType = -1;
switch (dComIfGs_getCollectSmell()) {
case fpcNm_ITEM_SMELL_YELIA_POUCH:
smellType = 3;
break;
case fpcNm_ITEM_SMELL_POH:
smellType = 4;
break;
case fpcNm_ITEM_SMELL_FISH:
smellType = 2;
break;
case fpcNm_ITEM_SMELL_CHILDREN:
smellType = 1;
break;
case fpcNm_ITEM_SMELL_MEDICINE:
smellType = 0;
break;
}
for (int i = 0; i < 5; i++) {
if (i == smellType) {
mpScreen->search(smell_tag[i])->show();
} else {
mpScreen->search(smell_tag[i])->hide();
}
}
}
/* 801B3640-801B370C 1ADF80 00CC+00 1/1 0/0 0/0 .text setHeartPiece__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::setHeartPiece() {
static const u64 heart_tag[4] = {
'heart_1n',
'heart_2n',
'heart_3n',
'heart_4n',
};
s32 life = dComIfGs_getMaxLife() % 5;
for (int i = 0; i < MAX_VISIBLE_HEARTPIECES; i++) {
if (i < life) {
mpScreen->search(heart_tag[i])->show();
} else {
mpScreen->search(heart_tag[i])->hide();
}
}
}
/* 801B370C-801B39D0 1AE04C 02C4+00 1/1 0/0 0/0 .text setPohMaxNum__17dMenu_Collect2D_cFUc */
void dMenu_Collect2D_c::setPohMaxNum(u8 i_pohNum) {
if (i_pohNum > MAX_POH_NUM) {
i_pohNum = MAX_POH_NUM;
}
if (field_0x22d[0][3] != 0) {
int div = i_pohNum / 100;
s32 index = i_pohNum % 100;
u8 check = 0;
if (div > 0) {
JKRArchive* archive = dComIfGp_getMain2DArchive();
const char* textureName = dMeter2Info_getNumberTextureName(div);
ResTIMG* timg = (ResTIMG*)archive->getResource('TIMG', textureName);
static_cast<J2DPicture*>(mpScreen->search('item2_3'))->changeTexture(timg, 0);
check = 1;
} else {
mpScreen->search('item2_3')->hide();
}
div = index / 10;
index = index % 10;
if (div != 0 || check != 0) {
JKRArchive* archive = dComIfGp_getMain2DArchive();
const char* textureName2 = dMeter2Info_getNumberTextureName(div);
ResTIMG* timg2 = (ResTIMG*)archive->getResource('TIMG', textureName2);
static_cast<J2DPicture*>(mpScreen->search('item2_2'))->changeTexture(timg2, 0);
} else {
mpScreen->search('item2_2')->hide();
}
JKRArchive* archive = dComIfGp_getMain2DArchive();
const char* textureName3 = dMeter2Info_getNumberTextureName(index);
ResTIMG* timg3 = (ResTIMG*)archive->getResource('TIMG', textureName3);
static_cast<J2DPicture*>(mpScreen->search('item2_1'))->changeTexture(timg3, 0);
} else {
mpScreen->search('item2_3')->hide();
mpScreen->search('item2_2')->hide();
mpScreen->search('item2_1')->hide();
}
}
/* 801B39D0-801B3CF4 1AE310 0324+00 2/2 0/0 0/0 .text
* setEquipItemFrameColorSword__17dMenu_Collect2D_cFi */
void dMenu_Collect2D_c::setEquipItemFrameColorSword(int i_frame) {
static const u64 tag[2] = {
'ken_g_0',
'ken_g_1',
};
if (i_frame == -1) {
if (mEquippedSword != dComIfGs_getSelectEquipSword()) {
mEquippedSword = dComIfGs_getSelectEquipSword();
switch (mEquippedSword) {
case fpcNm_ITEM_SWORD:
i_frame = 0;
break;
case fpcNm_ITEM_WOOD_STICK:
i_frame = 0;
break;
case fpcNm_ITEM_MASTER_SWORD:
i_frame = 1;
break;
case fpcNm_ITEM_LIGHT_SWORD:
if (dComIfGs_isItemFirstBit(fpcNm_ITEM_LIGHT_SWORD)) {
i_frame = 1;
}
break;
}
for (int i = 0; i < 2; i++) {
if (i == i_frame && field_0x22d[i + 3][0] != 0) {
static_cast<J2DPicture*>(mpScreen->search(tag[i]))
->setBlackWhite(JUtility::TColor(0, 0, 0, 0),
JUtility::TColor(255, 255, 0, 255));
} else {
static_cast<J2DPicture*>(mpScreen->search(tag[i]))
->setBlackWhite(JUtility::TColor(0, 0, 0, 0),
JUtility::TColor(107, 107, 107, 255));
}
}
}
} else {
for (int i = 0; i < 2; i++) {
if (i == i_frame && field_0x22d[i + 3][0] != 0) {
static_cast<J2DPicture*>(mpScreen->search(tag[i]))
->setBlackWhite(JUtility::TColor(0, 0, 0, 0),
JUtility::TColor(255, 255, 0, 255));
} else {
static_cast<J2DPicture*>(mpScreen->search(tag[i]))
->setBlackWhite(JUtility::TColor(0, 0, 0, 0),
JUtility::TColor(107, 107, 107, 255));
}
}
}
}
/* 801B3CF4-801B3FDC 1AE634 02E8+00 2/2 0/0 0/0 .text
* setEquipItemFrameColorShield__17dMenu_Collect2D_cFi */
void dMenu_Collect2D_c::setEquipItemFrameColorShield(int i_frame) {
static const u64 tag[2] = {
'tate_g_0',
'tate_g_1',
};
if (i_frame == -1) {
if (mEquippedShield != dComIfGs_getSelectEquipShield()) {
mEquippedShield = dComIfGs_getSelectEquipShield();
switch (mEquippedShield) {
case fpcNm_ITEM_SHIELD:
case fpcNm_ITEM_WOOD_SHIELD:
i_frame = 0;
break;
case fpcNm_ITEM_HYLIA_SHIELD:
i_frame = 1;
break;
}
for (int i = 0; i < 2; i++) {
if (i == i_frame && field_0x22d[i + 3][1] != 0) {
static_cast<J2DPicture*>(mpScreen->search(tag[i]))
->setBlackWhite(JUtility::TColor(0, 0, 0, 0),
JUtility::TColor(255, 255, 0, 255));
} else {
static_cast<J2DPicture*>(mpScreen->search(tag[i]))
->setBlackWhite(JUtility::TColor(0, 0, 0, 0),
JUtility::TColor(107, 107, 107, 255));
}
}
}
} else {
for (int i = 0; i < 2; i++) {
if (i == i_frame && field_0x22d[i + 3][1] != 0) {
static_cast<J2DPicture*>(mpScreen->search(tag[i]))
->setBlackWhite(JUtility::TColor(0, 0, 0, 0),
JUtility::TColor(255, 255, 0, 255));
} else {
static_cast<J2DPicture*>(mpScreen->search(tag[i]))
->setBlackWhite(JUtility::TColor(0, 0, 0, 0),
JUtility::TColor(107, 107, 107, 255));
}
}
}
}
/* 801B3FDC-801B42D8 1AE91C 02FC+00 2/2 0/0 0/0 .text
* setEquipItemFrameColorClothes__17dMenu_Collect2D_cFi */
void dMenu_Collect2D_c::setEquipItemFrameColorClothes(int i_frame) {
static const u64 tag[3] = {
'fuku_g_0',
'fuku_g_1',
'fuku_g_2',
};
if (i_frame == -1) {
if (mEquippedClothes != dComIfGs_getSelectEquipClothes()) {
mEquippedClothes = dComIfGs_getSelectEquipClothes();
switch (mEquippedClothes) {
case fpcNm_ITEM_WEAR_KOKIRI:
i_frame = 0;
break;
case fpcNm_ITEM_WEAR_ZORA:
i_frame = 1;
break;
case fpcNm_ITEM_ARMOR:
i_frame = 2;
break;
}
for (int i = 0; i < 3; i++) {
if (i == i_frame && field_0x22d[i + 3][2] != 0) {
static_cast<J2DPicture*>(mpScreen->search(tag[i]))
->setBlackWhite(JUtility::TColor(0, 0, 0, 0),
JUtility::TColor(255, 255, 0, 255));
} else {
static_cast<J2DPicture*>(mpScreen->search(tag[i]))
->setBlackWhite(JUtility::TColor(0, 0, 0, 0),
JUtility::TColor(107, 107, 107, 255));
}
}
}
} else {
for (int i = 0; i < 3; i++) {
if (i == i_frame && field_0x22d[i + 3][2] != 0) {
static_cast<J2DPicture*>(mpScreen->search(tag[i]))
->setBlackWhite(JUtility::TColor(0, 0, 0, 0),
JUtility::TColor(255, 255, 0, 255));
} else {
static_cast<J2DPicture*>(mpScreen->search(tag[i]))
->setBlackWhite(JUtility::TColor(0, 0, 0, 0),
JUtility::TColor(107, 107, 107, 255));
}
}
}
}
/* 801B42D8-801B46FC 1AEC18 0424+00 2/2 0/0 0/0 .text setHIO__17dMenu_Collect2D_cFb */
void dMenu_Collect2D_c::setHIO(bool i_useHIO) {
static const u64 kaz_n[9] = {
'uzu_00', 'uzu_01', 'uzu_02', 'uzu_03', 'uzu_04', 'uzu_05', 'uzu_06', 'uzu_07', 'hishi',
};
if (mBlueSmokePosX != g_drawHIO.mCollectScreen.mBlueSmokePosX ||
mBlueSmokePosY != g_drawHIO.mCollectScreen.mBlueSmokePosY)
{
mBlueSmokePosX = g_drawHIO.mCollectScreen.mBlueSmokePosX;
mBlueSmokePosY = g_drawHIO.mCollectScreen.mBlueSmokePosY;
mpModelBg->paneTrans(mBlueSmokePosX, mBlueSmokePosY);
}
if (mBlueSmokeScale != g_drawHIO.mCollectScreen.mBlueSmokeScale) {
mBlueSmokeScale = g_drawHIO.mCollectScreen.mBlueSmokeScale;
mpModelBg->scale(mBlueSmokeScale, mBlueSmokeScale);
}
if (mBlueSmokeAlpha != g_drawHIO.mCollectScreen.mBlueSmokeAlpha) {
mBlueSmokeAlpha = g_drawHIO.mCollectScreen.mBlueSmokeAlpha;
mpModelBg->setAlphaRate(mBlueSmokeAlpha);
}
if (mHeartVesselPosX != g_drawHIO.mCollectScreen.mHeartVesselPosX ||
mHeartVesselPosY != g_drawHIO.mCollectScreen.mHeartVesselPosY)
{
mHeartVesselPosX = g_drawHIO.mCollectScreen.mHeartVesselPosX;
mHeartVesselPosY = g_drawHIO.mCollectScreen.mHeartVesselPosY;
mpHeartParent->paneTrans(mHeartVesselPosX, mHeartVesselPosY);
}
if (mHeartVesselScale != g_drawHIO.mCollectScreen.mHeartVesselScale) {
mHeartVesselScale = g_drawHIO.mCollectScreen.mHeartVesselScale;
mpHeartParent->scale(mHeartVesselScale, mHeartVesselScale);
}
if (mHeartPiecePosX != g_drawHIO.mCollectScreen.mHeartPiecePosX ||
mHeartPiecePosY != g_drawHIO.mCollectScreen.mHeartPiecePosY)
{
mHeartPiecePosX = g_drawHIO.mCollectScreen.mHeartPiecePosX;
mHeartPiecePosY = g_drawHIO.mCollectScreen.mHeartPiecePosY;
mpHeartPiece->paneTrans(mHeartPiecePosX, mHeartPiecePosY);
}
if (mHeartPieceScale != g_drawHIO.mCollectScreen.mHeartPieceScale) {
mHeartPieceScale = g_drawHIO.mCollectScreen.mHeartPieceScale;
mpHeartPiece->scale(mHeartPieceScale, mHeartPieceScale);
}
if (g_drawHIO.mCollectScreen.mColorDebugON) {
J2DPicture* basePicture = (J2DPicture*)mpScreen->search('nht_base');
basePicture->setBlackWhite(g_drawHIO.mCollectScreen.mVesselBack[0],
g_drawHIO.mCollectScreen.mVesselFront[0]);
for (int i = 0; i < 9; i++) {
J2DPicture* kazPicture = (J2DPicture*)mpScreen->search(kaz_n[i]);
kazPicture->setBlackWhite(g_drawHIO.mCollectScreen.mVesselBack[1],
g_drawHIO.mCollectScreen.mVesselFront[1]);
}
}
if (g_drawHIO.mCollectScreen.mButtonDebugON || i_useHIO) {
if (mpButtonAB[0] != NULL) {
mpButtonAB[0]->paneTrans(g_drawHIO.mCollectScreen.mButtonAPosX,
g_drawHIO.mCollectScreen.mButtonAPosY);
mpButtonAB[0]->scale(g_drawHIO.mCollectScreen.mButtonAScale,
g_drawHIO.mCollectScreen.mButtonAScale);
}
if (mpButtonAB[1] != NULL) {
mpButtonAB[1]->paneTrans(g_drawHIO.mCollectScreen.mButtonBPosX,
g_drawHIO.mCollectScreen.mButtonBPosY);
mpButtonAB[1]->scale(g_drawHIO.mCollectScreen.mButtonBScale,
g_drawHIO.mCollectScreen.mButtonBScale);
}
if (mpButtonText[0] != NULL) {
mpButtonText[0]->paneTrans(g_drawHIO.mCollectScreen.mButtonATextPosX,
g_drawHIO.mCollectScreen.mButtonATextPosY);
mpButtonText[0]->scale(g_drawHIO.mCollectScreen.mButtonATextScale,
g_drawHIO.mCollectScreen.mButtonATextScale);
}
if (mpButtonText[1] != NULL) {
mpButtonText[1]->paneTrans(g_drawHIO.mCollectScreen.mButtonBTextPosX,
g_drawHIO.mCollectScreen.mButtonBTextPosY);
mpButtonText[1]->scale(g_drawHIO.mCollectScreen.mButtonBTextScale,
g_drawHIO.mCollectScreen.mButtonBTextScale);
}
}
}
/* 801B46FC-801B473C 1AF03C 0040+00 3/3 0/0 0/0 .text getItemTag__17dMenu_Collect2D_cFiib
*/
u64 dMenu_Collect2D_c::getItemTag(int i_tag1, int i_tag2, bool param_3) {
static const u64 itemTag[6][7] = {
{0, 0, 0, 'ken_n0', 'ken_n1', 'heart_kn', 'kamen_n'},
{0, 0, 0, 'tate_n0', 'tate_n1'},
{
0,
0,
0,
'fuku_n0',
'fuku_n1',
'fuku_n2',
},
{
'item_1_n',
'item_0_n',
'kabu_6n',
'maki_5_n',
},
{
'wolf_n',
'item_2_n',
'fish_3_n',
'lett_4_n',
},
{'save_n', 'option_n'},
};
if (i_tag2 == 5 && !param_3) {
return 0;
}
return itemTag[i_tag2][i_tag1];
}
/* 801B473C-801B48D0 1AF07C 0194+00 1/0 0/0 0/0 .text wait_init__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::wait_init() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (mpSaveScrn != NULL) {
mpSaveScrn->_delete();
delete mpSaveScrn;
mpSaveScrn = NULL;
mpSubHeap->freeAll();
}
if (mpOptionScrn != NULL) {
mpOptionScrn->_delete();
delete mpOptionScrn;
mpOptionScrn = NULL;
mpSubHeap->freeAll();
}
if (mpLetterScrn != NULL) {
delete mpLetterScrn;
mpLetterScrn = NULL;
mpSubHeap->freeAll();
}
if (mpFishingScrn != NULL) {
delete mpFishingScrn;
mpFishingScrn = NULL;
mpSubHeap->freeAll();
}
if (mpSkillScrn != NULL) {
delete mpSkillScrn;
mpSkillScrn = NULL;
mpSubHeap->freeAll();
}
if (mpInsectScrn != NULL) {
delete mpInsectScrn;
mpInsectScrn = NULL;
mpSubHeap->freeAll();
}
mDoExt_setCurrentHeap(heap);
}
/* 801B48D0-801B4E14 1AF210 0544+00 1/0 0/0 0/0 .text wait_proc__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::wait_proc() {
if (dMw_A_TRIGGER()) {
if (mCursorX == 0 && mCursorY == 5) {
if (mDoGph_gInf_c::getFader()->mStatus == 1) {
mSubWindowOpenCheck = 1;
Z2GetAudioMgr()->seStart(Z2SE_SY_MENU_CHANGE_WINDOW, NULL, 0, 0, 1.0f, 1.0f, -1.0f,
-1.0f, 0);
dMeter2Info_set2DVibrationM();
}
} else if (mCursorX == 1 && mCursorY == 5) {
if (mDoGph_gInf_c::getFader()->mStatus == 1) {
mSubWindowOpenCheck = 2;
Z2GetAudioMgr()->seStart(Z2SE_SY_MENU_CHANGE_WINDOW, NULL, 0, 0, 1.0f, 1.0f, -1.0f,
-1.0f, 0);
dMeter2Info_set2DVibrationM();
}
} else if (mCursorX == 3 && mCursorY == 4) {
if (field_0x22d[3][4] != 0 && mDoGph_gInf_c::getFader()->mStatus == 1) {
mSubWindowOpenCheck = 3;
dMeter2Info_set2DVibration();
}
} else if (mCursorX == 2 && mCursorY == 4) {
if (isFishIconVisible() && mDoGph_gInf_c::getFader()->mStatus == 1) {
mSubWindowOpenCheck = 4;
dMeter2Info_set2DVibration();
}
} else if (mCursorX == 3 && mCursorY == 3) {
if (isSkillIconVisible() && mDoGph_gInf_c::getFader()->mStatus == 1) {
mSubWindowOpenCheck = 5;
dMeter2Info_set2DVibration();
}
} else if (mCursorX == 2 && mCursorY == 3) {
if (isInsectIconVisible() && mDoGph_gInf_c::getFader()->mStatus == 1) {
mSubWindowOpenCheck = 6;
dMeter2Info_set2DVibration();
}
} else {
if (field_0x22d[mCursorX][mCursorY] != 0 && !mIsWolf) {
if ((mCursorX >= 3 && mCursorX <= 4) || (mCursorX == 5 && mCursorY == 2)) {
u8 cursorY = mCursorY;
if (cursorY == 0) {
if (daPy_getPlayerActorClass()->getSwordChangeWaitTimer() == 0) {
changeSword();
}
} else if (cursorY == 1) {
if (daPy_getPlayerActorClass()->getShieldChangeWaitTimer() == 0) {
changeShield();
}
} else if (cursorY == 2 &&
daPy_getPlayerActorClass()->getClothesChangeWaitTimer() == 0)
{
changeClothe();
}
}
}
}
} else {
if (daPy_getPlayerActorClass()->getSwordChangeWaitTimer() == 0 &&
daPy_getPlayerActorClass()->getShieldChangeWaitTimer() == 0 &&
daPy_getPlayerActorClass()->getClothesChangeWaitTimer() == 0)
{
cursorMove();
}
if (mCursorX >= 3 && mCursorX <= 4 && mCursorY <= 2 || (mCursorX == 5 && mCursorY == 2)) {
if (field_0x22d[mCursorX][mCursorY] != 0 && !mIsWolf) {
setAButtonString(0x436);
} else {
setAButtonString(0);
}
} else if ((mCursorX == 0 && mCursorY == 5) || (mCursorX == 1 && mCursorY == 5)) {
setAButtonString(0x40C);
} else {
if (field_0x22d[mCursorX][mCursorY] != 0) {
if (mCursorX == 3 && mCursorY == 4) {
if (field_0x22d[3][4] != 0) {
setAButtonString(0x3EE);
}
} else if (mCursorX == 2 && mCursorY == 4) {
if (isFishIconVisible()) {
setAButtonString(0x3EE);
}
} else if (mCursorX == 3 && mCursorY == 3) {
if (isSkillIconVisible()) {
setAButtonString(0x3EE);
}
} else if (mCursorX == 2 && mCursorY == 3) {
if (isInsectIconVisible()) {
setAButtonString(0x3EE);
}
} else if (mCursorX < 3 && mCursorY < 3) {
setAButtonString(0x40C);
} else {
setAButtonString(0);
}
} else {
setAButtonString(0);
}
}
setBButtonString(0x3F9);
}
}
/* 801B4E14-801B4EC0 1AF754 00AC+00 1/0 0/0 0/0 .text save_open_init__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::save_open_init() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (!mpSaveScrn) {
mpSaveScrn = new dMenu_save_c();
}
mpSaveScrn->setUseType(1);
mpSaveScrn->_create();
mpSaveScrn->initialize();
setAButtonString(0);
setBButtonString(0);
mpDrawCursor->offPlayAllAnime();
mDoExt_setCurrentHeap(heap);
}
/* 801B4EC0-801B4F30 1AF800 0070+00 1/0 0/0 0/0 .text save_open_proc__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::save_open_proc() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (mpSaveScrn->getSaveStatus() == 1) {
mpSaveScrn->_open();
}
if (mpSaveScrn->getSaveStatus() == 2) {
mProcess = 2;
}
mDoExt_setCurrentHeap(heap);
}
/* 801B4F30-801B4F6C 1AF870 003C+00 1/0 0/0 0/0 .text save_move_init__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::save_move_init() {
setAButtonString(0x040c);
setBButtonString(0);
}
/* 801B4F6C-801B4FDC 1AF8AC 0070+00 1/0 0/0 0/0 .text save_move_proc__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::save_move_proc() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (mpSaveScrn->getSaveStatus() == 2) {
mpSaveScrn->_move();
}
if (mpSaveScrn->getSaveStatus() == 3) {
mProcess = 3;
}
mDoExt_setCurrentHeap(heap);
}
/* 801B4FDC-801B5018 1AF91C 003C+00 1/0 0/0 0/0 .text save_close_init__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::save_close_init() {
setAButtonString(0);
setBButtonString(0);
}
/* 801B5018-801B5094 1AF958 007C+00 1/0 0/0 0/0 .text save_close_proc__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::save_close_proc() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (mpSaveScrn->getSaveStatus() == 3) {
mpSaveScrn->_close();
}
if (mpSaveScrn->getSaveStatus() == 0) {
mProcess = 0;
mpDrawCursor->onPlayAllAnime();
}
mDoExt_setCurrentHeap(heap);
}
/* 801B5094-801B513C 1AF9D4 00A8+00 1/0 0/0 0/0 .text option_open_init__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::option_open_init() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (!mpOptionScrn) {
mpOptionScrn = new dMenu_Option_c(dComIfGp_getCollectResArchive(), mpStick);
}
mpOptionScrn->initialize();
setAButtonString(0);
setBButtonString(0);
mpDrawCursor->offPlayAllAnime();
mDoExt_setCurrentHeap(heap);
}
/* 801B513C-801B51AC 1AFA7C 0070+00 1/0 0/0 0/0 .text option_open_proc__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::option_open_proc() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (mpOptionScrn->getQuitStatus() == 1) {
mpOptionScrn->_open();
}
if (mpOptionScrn->getQuitStatus() == 2) {
mProcess = 5;
}
mDoExt_setCurrentHeap(heap);
}
/* 801B51AC-801B51E8 1AFAEC 003C+00 1/0 0/0 0/0 .text option_move_init__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::option_move_init() {
setAButtonString(0x040c);
setBButtonString(0x03f9);
}
/* 801B51E8-801B5258 1AFB28 0070+00 1/0 0/0 0/0 .text option_move_proc__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::option_move_proc() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (mpOptionScrn->getQuitStatus() == 2) {
mpOptionScrn->_move();
}
if (mpOptionScrn->getQuitStatus() == 3) {
mProcess = 6;
}
mDoExt_setCurrentHeap(heap);
}
/* 801B5258-801B5294 1AFB98 003C+00 1/0 0/0 0/0 .text option_close_init__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::option_close_init() {
setAButtonString(0);
setBButtonString(0);
}
/* 801B5294-801B5310 1AFBD4 007C+00 1/0 0/0 0/0 .text option_close_proc__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::option_close_proc() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (mpOptionScrn->getQuitStatus() == 3) {
mpOptionScrn->_close();
}
if (mpOptionScrn->getQuitStatus() == 0) {
mProcess = 0;
mpDrawCursor->onPlayAllAnime();
}
mDoExt_setCurrentHeap(heap);
}
/* 801B5310-801B53AC 1AFC50 009C+00 1/0 0/0 0/0 .text letter_open_init__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::letter_open_init() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (!mpLetterScrn) {
mpLetterScrn = new dMenu_Letter_c(mpSubHeap, mpStick, mpCStick);
}
setAButtonString(0);
setBButtonString(0);
mpDrawCursor->offPlayAllAnime();
mDoExt_setCurrentHeap(heap);
}
/* 801B53AC-801B541C 1AFCEC 0070+00 1/0 0/0 0/0 .text letter_open_proc__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::letter_open_proc() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (mpLetterScrn->getStatus() == 1) {
mpLetterScrn->_open();
}
if (mpLetterScrn->getStatus() == 2) {
mProcess = 8;
}
mDoExt_setCurrentHeap(heap);
}
/* 801B541C-801B5458 1AFD5C 003C+00 1/0 0/0 0/0 .text letter_move_init__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::letter_move_init() {
setAButtonString(0x040c);
setBButtonString(0x03f9);
}
/* 801B5458-801B54C8 1AFD98 0070+00 1/0 0/0 0/0 .text letter_move_proc__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::letter_move_proc() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (mpLetterScrn->getStatus() == 2) {
mpLetterScrn->_move();
}
if (mpLetterScrn->getStatus() == 3) {
mProcess = 9;
}
mDoExt_setCurrentHeap(heap);
}
/* 801B54C8-801B5504 1AFE08 003C+00 1/0 0/0 0/0 .text letter_close_init__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::letter_close_init() {
setAButtonString(0);
setBButtonString(0);
}
/* 801B5504-801B5580 1AFE44 007C+00 1/0 0/0 0/0 .text letter_close_proc__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::letter_close_proc() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (mpLetterScrn->getStatus() == 3) {
mpLetterScrn->_close();
}
if (mpLetterScrn->getStatus() == 0) {
mProcess = 0;
mpDrawCursor->onPlayAllAnime();
}
mDoExt_setCurrentHeap(heap);
}
/* 801B5580-801B561C 1AFEC0 009C+00 1/0 0/0 0/0 .text fishing_open_init__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::fishing_open_init() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (!mpFishingScrn) {
mpFishingScrn = new dMenu_Fishing_c(mpSubHeap, mpStick, mpCStick);
}
setAButtonString(0);
setBButtonString(0);
mpDrawCursor->offPlayAllAnime();
mDoExt_setCurrentHeap(heap);
}
/* 801B561C-801B568C 1AFF5C 0070+00 1/0 0/0 0/0 .text fishing_open_proc__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::fishing_open_proc() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (mpFishingScrn->getStatus() == 1) {
mpFishingScrn->_open();
}
if (mpFishingScrn->getStatus() == 2) {
mProcess = 11;
}
mDoExt_setCurrentHeap(heap);
}
/* 801B568C-801B56C8 1AFFCC 003C+00 1/0 0/0 0/0 .text fishing_move_init__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::fishing_move_init() {
setAButtonString(0x040c);
setBButtonString(0x03f9);
}
/* 801B56C8-801B5738 1B0008 0070+00 1/0 0/0 0/0 .text fishing_move_proc__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::fishing_move_proc() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (mpFishingScrn->getStatus() == 2) {
mpFishingScrn->_move();
}
if (mpFishingScrn->getStatus() == 3) {
mProcess = 12;
}
mDoExt_setCurrentHeap(heap);
}
/* 801B5738-801B5774 1B0078 003C+00 1/0 0/0 0/0 .text fishing_close_init__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::fishing_close_init() {
setAButtonString(0);
setBButtonString(0);
}
/* 801B5774-801B57F0 1B00B4 007C+00 1/0 0/0 0/0 .text fishing_close_proc__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::fishing_close_proc() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (mpFishingScrn->getStatus() == 3) {
mpFishingScrn->_close();
}
if (mpFishingScrn->getStatus() == 0) {
mProcess = 0;
mpDrawCursor->onPlayAllAnime();
}
mDoExt_setCurrentHeap(heap);
}
/* 801B57F0-801B588C 1B0130 009C+00 1/0 0/0 0/0 .text skill_open_init__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::skill_open_init() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (!mpSkillScrn) {
mpSkillScrn = new dMenu_Skill_c(mpSubHeap, mpStick, mpCStick);
}
setAButtonString(0);
setBButtonString(0);
mpDrawCursor->offPlayAllAnime();
mDoExt_setCurrentHeap(heap);
}
/* 801B588C-801B58FC 1B01CC 0070+00 1/0 0/0 0/0 .text skill_open_proc__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::skill_open_proc() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (mpSkillScrn->getStatus() == 1) {
mpSkillScrn->_open();
}
if (mpSkillScrn->getStatus() == 2) {
mProcess = 14;
}
mDoExt_setCurrentHeap(heap);
}
/* 801B58FC-801B5938 1B023C 003C+00 1/0 0/0 0/0 .text skill_move_init__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::skill_move_init() {
setAButtonString(0x040c);
setBButtonString(0x03f9);
}
/* 801B5938-801B59A8 1B0278 0070+00 1/0 0/0 0/0 .text skill_move_proc__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::skill_move_proc() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (mpSkillScrn->getStatus() == 2) {
mpSkillScrn->_move();
}
if (mpSkillScrn->getStatus() == 3) {
mProcess = 15;
}
mDoExt_setCurrentHeap(heap);
}
/* 801B59A8-801B59E4 1B02E8 003C+00 1/0 0/0 0/0 .text skill_close_init__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::skill_close_init() {
setAButtonString(0);
setBButtonString(0);
}
/* 801B59E4-801B5A60 1B0324 007C+00 1/0 0/0 0/0 .text skill_close_proc__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::skill_close_proc() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (mpSkillScrn->getStatus() == 3) {
mpSkillScrn->_close();
}
if (mpSkillScrn->getStatus() == 0) {
mProcess = 0;
mpDrawCursor->onPlayAllAnime();
}
mDoExt_setCurrentHeap(heap);
}
/* 801B5A60-801B5B00 1B03A0 00A0+00 1/0 0/0 0/0 .text insect_open_init__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::insect_open_init() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (!mpInsectScrn) {
mpInsectScrn = new dMenu_Insect_c(mpSubHeap, mpStick, mpCStick, 0);
}
setAButtonString(0);
setBButtonString(0);
mpDrawCursor->offPlayAllAnime();
mDoExt_setCurrentHeap(heap);
}
/* 801B5B00-801B5B70 1B0440 0070+00 1/0 0/0 0/0 .text insect_open_proc__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::insect_open_proc() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (mpInsectScrn->getStatus() == 1) {
mpInsectScrn->_open();
}
if (mpInsectScrn->getStatus() == 2) {
mProcess = 17;
}
mDoExt_setCurrentHeap(heap);
}
/* 801B5B70-801B5BAC 1B04B0 003C+00 1/0 0/0 0/0 .text insect_move_init__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::insect_move_init() {
setAButtonString(0x040c);
setBButtonString(0x03f9);
}
/* 801B5BAC-801B5C1C 1B04EC 0070+00 1/0 0/0 0/0 .text insect_move_proc__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::insect_move_proc() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (mpInsectScrn->getStatus() == 2) {
mpInsectScrn->_move();
}
if (mpInsectScrn->getStatus() == 3) {
mProcess = 18;
}
mDoExt_setCurrentHeap(heap);
}
/* 801B5C1C-801B5C58 1B055C 003C+00 1/0 0/0 0/0 .text insect_close_init__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::insect_close_init() {
setAButtonString(0);
setBButtonString(0);
}
/* 801B5C58-801B5CD4 1B0598 007C+00 1/0 0/0 0/0 .text insect_close_proc__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::insect_close_proc() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (mpInsectScrn->getStatus() == 3) {
mpInsectScrn->_close();
}
if (mpInsectScrn->getStatus() == 0) {
mProcess = 0;
mpDrawCursor->onPlayAllAnime();
}
mDoExt_setCurrentHeap(heap);
}
/* 801B5CD4-801B5D70 1B0614 009C+00 1/1 0/0 0/0 .text _move__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::_move() {
u8 last_process = mProcess;
(this->*process[last_process])();
if (mProcess != last_process) {
(this->*init[mProcess])();
}
btkAnimeLoop0(mpAnmKey);
mpScreen->animation();
setBackAlpha();
setHIO(false);
}
/* 801B5D70-801B5F48 1B06B0 01D8+00 1/1 0/0 0/0 .text _draw__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::_draw() {
J2DGrafContext* grafPort = dComIfGp_getCurrentGrafPort();
grafPort->setup2D();
mpScreen->draw(0.0f, 0.0f, grafPort);
if (mItemNameString == 0) {
char* stringPtr1 = static_cast<J2DTextBox*>(mpScreen->search('f_text1'))->getStringPtr();
strcpy(stringPtr1, "");
char* stringPtr0 = static_cast<J2DTextBox*>(mpScreen->search('f_text0'))->getStringPtr();
strcpy(stringPtr0, "");
} else {
J2DTextBox* textBox1 = static_cast<J2DTextBox*>(mpScreen->search('f_text1'));
mpString->getString(mItemNameString, textBox1, NULL, NULL, NULL, 0);
J2DTextBox* textBox0 = static_cast<J2DTextBox*>(mpScreen->search('f_text0'));
mpString->getString(mItemNameString, textBox0, NULL, NULL, NULL, 0);
textBox0 = static_cast<J2DTextBox*>(mpScreen->search('f_text0'));
mpString->drawOutFontLocal(textBox0, -1.0f);
}
mpDrawCursor->draw();
}
/* 801B5F48-801B5F84 1B0888 003C+00 1/1 0/0 0/0 .text drawTop__17dMenu_Collect2D_cFv */
void dMenu_Collect2D_c::drawTop() {
dComIfGd_set2DOpaTop(mpDraw2DTop);
}
/* 801B5F84-801B5FAC 1B08C4 0028+00 0/0 1/1 0/0 .text isKeyCheck__17dMenu_Collect2D_cFv
*/
bool dMenu_Collect2D_c::isKeyCheck() {
if (mProcess || field_0x25f) {
return true;
}
return false;
}
/* 801B5FAC-801B5FB4 1B08EC 0008+00 0/0 1/1 0/0 .text isOutCheck__17dMenu_Collect2D_cFv
*/
bool dMenu_Collect2D_c::isOutCheck() {
return false;
}
/* 801B5FB4-801B60B8 1B08F4 0104+00 20/20 0/0 0/0 .text setAButtonString__17dMenu_Collect2D_cFUs
*/
void dMenu_Collect2D_c::setAButtonString(u16 i_stringID) {
static const u64 text_a_tag[5] = {
'atext1_1', 'atext1_2', 'atext1_3', 'atext1_4', 'atext1_5',
};
if (i_stringID != mCurrentAString) {
mCurrentAString = i_stringID;
if (i_stringID == 0) {
for (int i = 0; i < 5; i++) {
char* stringPtr =
static_cast<J2DTextBox*>(mpScreenIcon->search(text_a_tag[i]))->getStringPtr();
strcpy(stringPtr, "");
}
} else {
for (int i = 0; i < 5; i++) {
char* stringPtr =
static_cast<J2DTextBox*>(mpScreenIcon->search(text_a_tag[i]))->getStringPtr();
dMeter2Info_getStringKanji(i_stringID, stringPtr, NULL);
}
}
}
}
/* 801B60B8-801B61BC 1B09F8 0104+00 20/20 0/0 0/0 .text setBButtonString__17dMenu_Collect2D_cFUs
*/
void dMenu_Collect2D_c::setBButtonString(u16 i_stringID) {
static const u64 text_b_tag[5] = {
'btext1_1', 'btext1_2', 'btext1_3', 'btext1_4', 'btext1_5',
};
if (i_stringID != mCurrentBString) {
mCurrentBString = i_stringID;
if (i_stringID == 0) {
for (int i = 0; i < 5; i++) {
char* stringPtr =
static_cast<J2DTextBox*>(mpScreenIcon->search(text_b_tag[i]))->getStringPtr();
strcpy(stringPtr, "");
}
} else {
for (int i = 0; i < 5; i++) {
char* stringPtr =
static_cast<J2DTextBox*>(mpScreenIcon->search(text_b_tag[i]))->getStringPtr();
dMeter2Info_getStringKanji(i_stringID, stringPtr, NULL);
}
}
}
}
/* 801B61BC-801B6344 1B0AFC 0188+00 2/2 0/0 0/0 .text setItemNameString__17dMenu_Collect2D_cFUcUc
*/
void dMenu_Collect2D_c::setItemNameString(u8 param_0, u8 param_1) {
if (field_0x22d[param_0][param_1] == 0) {
setItemNameStringNull();
} else {
u32 uVar6 = field_0x184[param_0][param_1];
mItemNameString = field_0x1d8[param_0][param_1];
field_0x180 = uVar6;
if (uVar6 == 0) {
setItemNameStringNull();
} else {
char* stringPtr =
static_cast<J2DTextBox*>(mpScreen->search('item_n04'))->getStringPtr();
dMeter2Info_getStringKanji(uVar6, stringPtr, NULL);
stringPtr = static_cast<J2DTextBox*>(mpScreen->search('item_n05'))->getStringPtr();
dMeter2Info_getStringKanji(uVar6, stringPtr, NULL);
stringPtr = static_cast<J2DTextBox*>(mpScreen->search('item_n06'))->getStringPtr();
dMeter2Info_getStringKanji(uVar6, stringPtr, NULL);
stringPtr = static_cast<J2DTextBox*>(mpScreen->search('item_n07'))->getStringPtr();
dMeter2Info_getStringKanji(uVar6, stringPtr, NULL);
}
}
}
/* 801B6344-801B6454 1B0C84 0110+00 1/1 0/0 0/0 .text setItemNameStringNull__17dMenu_Collect2D_cFv
*/
void dMenu_Collect2D_c::setItemNameStringNull() {
mItemNameString = 0;
J2DTextBox* textBox = (J2DTextBox*)mpScreen->search('item_n04');
strcpy(textBox->getStringPtr(), "");
textBox = (J2DTextBox*)mpScreen->search('item_n05');
strcpy(textBox->getStringPtr(), "");
textBox = (J2DTextBox*)mpScreen->search('item_n06');
strcpy(textBox->getStringPtr(), "");
textBox = (J2DTextBox*)mpScreen->search('item_n07');
strcpy(textBox->getStringPtr(), "");
}
/* 801B6454-801B6538 1B0D94 00E4+00 1/1 0/0 0/0 .text
* __ct__17dMenu_Collect3D_cFP10JKRExpHeapP17dMenu_Collect2D_cP10CSTControl */
dMenu_Collect3D_c::dMenu_Collect3D_c(JKRExpHeap* param_0, dMenu_Collect2D_c* param_1,
CSTControl* param_2) {
mIsWolf = daPy_py_c::checkNowWolf();
mpHeap = param_0;
mpSolidHeap = NULL;
mpCStick = param_2;
mpCollect2D = param_1;
if (mIsWolf) {
mLinkAngle = -20748;
} else {
mLinkAngle = -23324;
}
mMaskMirrorAnmFrameBrk = 0.0f;
mMaskMirrorAnmFrameBck = 0.0f;
mMaskMirrorOffsetY = 0.0f;
mMaskMirrorOffsetX = 0.0f;
mMaskMirrorScale = 1.0f;
}
/* 801B6538-801B65A8 1B0E78 0070+00 1/0 0/0 0/0 .text __dt__17dMenu_Collect3D_cFv */
dMenu_Collect3D_c::~dMenu_Collect3D_c() {
if (mpSolidHeap) {
mDoExt_destroySolidHeap(mpSolidHeap);
mpSolidHeap = NULL;
}
}
/* 801B65A8-801B6694 1B0EE8 00EC+00 1/1 0/0 0/0 .text _create__17dMenu_Collect3D_cFv */
void dMenu_Collect3D_c::_create() {
mpHeap->getTotalFreeSize();
mpSolidHeap = mDoExt_createSolidHeapToCurrent(0x25800, mpHeap, 0x20);
mDoExt_setCurrentHeap((JKRHeap*)mpSolidHeap);
daAlink_c* linkActor = daAlink_getAlinkActorClass();
if (linkActor != NULL) {
linkActor->initStatusWindow();
}
u8 maskMdl = getMaskMdlVisible();
if (maskMdl == 2) {
createMirrorModel();
} else if (maskMdl == 1) {
createMaskModel();
} else {
mpModel = NULL;
mpBckAnm = NULL;
mpBrkAnm = NULL;
}
mpSolidHeap->adjustSize();
mDoExt_restoreCurrentHeap();
if (mpModel != NULL) {
dKy_tevstr_init(&mTevStr, -1, 0xff);
set_mtx();
}
_move(mpCollect2D->getCursorX(), mpCollect2D->getCursorY());
}
/* 801B6694-801B66C8 1B0FD4 0034+00 1/1 0/0 0/0 .text _delete__17dMenu_Collect3D_cFv */
void dMenu_Collect3D_c::_delete() {
if (daAlink_getAlinkActorClass()) {
daAlink_getAlinkActorClass()->resetStatusWindow();
}
}
/* 801B66C8-801B696C 1B1008 02A4+00 2/2 0/0 0/0 .text _move__17dMenu_Collect3D_cFUcUc */
void dMenu_Collect3D_c::_move(u8 param_0, u8 param_1) {
cXyz itemPos;
Vec linkPos = mpCollect2D->getpLink()->getGlobalVtxCenter(false, 0);
f32 posY;
f32 posZ;
if (mIsWolf != 0) {
posY = linkPos.y + 60.0f;
posZ = 580.0f;
} else {
posY = linkPos.y + 90.0f;
posZ = 550.0f;
}
toItem3Dpos(linkPos.x, posY, posZ, &itemPos);
if (param_0 == 0 && param_1 == 0) {
f32 temp = 450.0f;
mLinkAngle += (s16)temp;
} else {
s16 target = mIsWolf != 0 ? (s16)-0x510C : (s16)-0x5B1C;
cLib_addCalcAngleS(&mLinkAngle, target, 4, 0x800, 0x80);
}
if (daAlink_getAlinkActorClass() != NULL) {
daAlink_getAlinkActorClass()->statusWindowExecute(&itemPos, mLinkAngle);
}
if (mpModel != NULL) {
cXyz modelPos;
Vec maskPos = mpCollect2D->getpMask()->getGlobalVtxCenter(false, 0);
f32 offsetX = 0.0f;
f32 offsetY = 0.0f;
if (getMaskMdlVisible() == 2) {
u8 mirrorNum = getMirrorNum();
if (mirrorNum == 1 || mirrorNum == 2 || mirrorNum == 3 || mirrorNum == 4) {
offsetX = -3.0f;
offsetY = -5.0f;
}
} else {
u8 crystalNum = getCrystalNum();
if (crystalNum == 1) {
offsetX = 16.0f;
offsetY = 0.0f;
} else if (crystalNum == 2) {
offsetX = 8.0f;
offsetY = -3.0f;
} else if (crystalNum == 3) {
offsetX = 2.0f;
offsetY = -4.0f;
} else if (crystalNum == 4) {
offsetX = -5.0f;
offsetY = -10.0f;
}
}
f32 offsetPosX =
maskPos.x + g_drawHIO.mCollectScreen.mMaskMirrorPos.x + mMaskMirrorOffsetX + offsetX;
f32 offsetPosY =
maskPos.y + g_drawHIO.mCollectScreen.mMaskMirrorPos.y + mMaskMirrorOffsetY + offsetY;
toItem3Dpos(offsetPosX, offsetPosY, 600.0f, &modelPos);
mMaskMirrorPos.set(modelPos);
mMaskMirrorAngle.set(g_drawHIO.mCollectScreen.mMaskMirrorAngle.x,
g_drawHIO.mCollectScreen.mMaskMirrorAngle.y,
g_drawHIO.mCollectScreen.mMaskMirrorAngle.z);
animePlay();
set_mtx();
}
}
/* 801B696C-801B6A30 1B12AC 00C4+00 1/1 0/0 0/0 .text draw__17dMenu_Collect3D_cFv */
void dMenu_Collect3D_c::draw() {
dComIfGd_setListItem3D();
if (daAlink_getAlinkActorClass()) {
daAlink_getAlinkActorClass()->statusWindowDraw();
}
if (mpModel) {
g_env_light.settingTevStruct(13, &mMaskMirrorPos, &mTevStr);
g_env_light.setLightTevColorType_MAJI(mpModel, &mTevStr);
animeEntry();
mDoExt_modelUpdateDL(mpModel);
}
dComIfGd_setList();
}
/* 801B6A30-801B6D30 1B1370 0300+00 2/2 0/0 0/0 .text setJ3D__17dMenu_Collect3D_cFPCcPCcPCc */
void dMenu_Collect3D_c::setJ3D(const char* param_0, const char* param_1, const char* param_2) {
JKRArchive* resArchive = dComIfGp_getCollectResArchive();
J3DModelData* modelData = J3DModelLoaderDataBase::load(
resArchive->getResource('BMD ', param_0), 0x51020010);
for (u16 i = 0; i < modelData->getMaterialNum(); i++) {
J3DMaterialAnm* matAnm = new J3DMaterialAnm();
modelData->getMaterialNodePointer(i)->change();
modelData->getMaterialNodePointer(i)->setMaterialAnm(matAnm);
}
mpModel = new J3DModel(modelData, 0, 1);
if (param_1 != NULL) {
J3DAnmTransform* pbck = (J3DAnmTransform*)J3DAnmLoaderDataBase::load(
resArchive->getResource('BCK ', param_1), J3DLOADER_UNK_FLAG0);
mpBckAnm = new mDoExt_bckAnm();
if (mpBckAnm == NULL || !mpBckAnm->init(pbck, 1, 2, 1.0f, 0, -1, false)) {
return;
}
}
if (param_2 != NULL) {
J3DAnmTevRegKey* pbrk = (J3DAnmTevRegKey*)J3DAnmLoaderDataBase::load(
resArchive->getResource('BRK ', param_2), J3DLOADER_UNK_FLAG0);
pbrk->searchUpdateMaterialID(modelData);
mpBrkAnm = new mDoExt_brkAnm();
if (mpBrkAnm == NULL || !mpBrkAnm->init(modelData, pbrk, -1, 2, 1.0f, 0, -1)) {
return;
}
}
}
/* 801B6D30-801B6E70 1B1670 0140+00 2/2 0/0 0/0 .text set_mtx__17dMenu_Collect3D_cFv */
void dMenu_Collect3D_c::set_mtx() {
f32 scale = 0.0f;
if (getMaskMdlVisible() == 2) {
u8 mirrorNum = getMirrorNum();
if (mirrorNum == 2 || mirrorNum == 3 || mirrorNum == 4) {
scale = -0.1f;
}
} else {
u8 crystalNum = getCrystalNum();
if (crystalNum == 1 || crystalNum == 2) {
scale = -0.6f;
} else if (crystalNum == 3) {
scale = -0.4f;
} else if (crystalNum == 4) {
scale = -0.3f;
}
}
f32 finalScale = g_drawHIO.mCollectScreen.mMaskMirrorScale + scale + mMaskMirrorScale;
cXyz baseScale;
baseScale.z = finalScale;
baseScale.y = finalScale;
baseScale.x = finalScale;
mpModel->setBaseScale(baseScale);
mDoMtx_stack_c::transS(mMaskMirrorPos.x, mMaskMirrorPos.y, mMaskMirrorPos.z);
mDoMtx_stack_c::YrotM(mMaskMirrorAngle.y);
mDoMtx_stack_c::XrotM(mMaskMirrorAngle.x);
mDoMtx_stack_c::ZrotM(mMaskMirrorAngle.z);
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
}
/* 801B6E70-801B6FB0 1B17B0 0140+00 1/1 0/0 0/0 .text animePlay__17dMenu_Collect3D_cFv */
void dMenu_Collect3D_c::animePlay() {
if (mpBrkAnm != NULL) {
mMaskMirrorAnmFrameBrk += g_drawHIO.mCollectScreen.mMaskMirrorAnimSpeed;
if (mMaskMirrorAnmFrameBrk >= mpBrkAnm->getEndFrame()) {
mMaskMirrorAnmFrameBrk -= mpBrkAnm->getEndFrame();
}
mpBrkAnm->setFrame(mMaskMirrorAnmFrameBrk);
mpBrkAnm->play();
}
if (mpBckAnm != NULL) {
mMaskMirrorAnmFrameBck += g_drawHIO.mCollectScreen.mMaskMirrorAnimSpeed;
if (mMaskMirrorAnmFrameBck >= mpBckAnm->getEndFrame()) {
mMaskMirrorAnmFrameBck -= mpBckAnm->getEndFrame();
}
mpBckAnm->setFrame(mMaskMirrorAnmFrameBck);
mpBckAnm->play();
}
}
/* 801B6FB0-801B7014 1B18F0 0064+00 1/1 0/0 0/0 .text animeEntry__17dMenu_Collect3D_cFv
*/
void dMenu_Collect3D_c::animeEntry() {
if (mpBrkAnm != NULL) {
mpBrkAnm->entry(mpModel->getModelData());
}
if (mpBckAnm != NULL) {
mpBckAnm->entry(mpModel->getModelData());
}
}
/* 801B7014-801B71C4 1B1954 01B0+00 1/1 0/0 0/0 .text createMaskModel__17dMenu_Collect3D_cFv */
void dMenu_Collect3D_c::createMaskModel() {
static const f32 m_kamen_offset_x[5] = {-14.0f, -14.0f, -14.0f, 1.3f, 6.5f};
static const f32 m_kamen_offset_y[5] = {0.0f, 0.0f, 0.0f, 22.0f, 30.0f};
static const f32 m_kamen_scale[5] = {2.6f, 2.6f, 2.2f, 1.8f, 1.8f};
static char* bck_name[4] = {
"md_mask_parts_spin_1.bck",
"md_mask_parts_spin_2.bck",
"md_mask_parts_spin_3.bck",
"md_mask_parts_spin_4.bck",
};
static char* brk_name[4] = {
"md_mask_parts_spin_1.brk",
"md_mask_parts_spin_2_3.brk",
"md_mask_parts_spin_2_3.brk",
"md_mask_parts_spin_4.brk",
};
u8 crystalNum = getCrystalNum();
mMaskMirrorOffsetX = m_kamen_offset_x[crystalNum];
mMaskMirrorOffsetY = m_kamen_offset_y[crystalNum];
mMaskMirrorScale = m_kamen_scale[crystalNum];
mMaskMirrorPos.set(0.0f, 0.0f, 0.0f);
mMaskMirrorAngle.set(0, 0, 0);
mpModel = NULL;
mpBckAnm = NULL;
mpBrkAnm = NULL;
if (crystalNum != 0) {
setJ3D("md_mask_UI.bmd", bck_name[crystalNum - 1], brk_name[crystalNum - 1]);
switch (crystalNum) {
case 1:
mpModel->getModelData()->getMaterialNodePointer(0)->getShape()->hide();
mpModel->getModelData()->getMaterialNodePointer(1)->getShape()->hide();
case 2:
mpModel->getModelData()->getMaterialNodePointer(2)->getShape()->hide();
mpModel->getModelData()->getMaterialNodePointer(3)->getShape()->hide();
case 3:
mpModel->getModelData()->getMaterialNodePointer(6)->getShape()->hide();
mpModel->getModelData()->getMaterialNodePointer(7)->getShape()->hide();
break;
}
}
}
/* 801B71C4-801B7434 1B1B04 0270+00 1/1 0/0 0/0 .text createMirrorModel__17dMenu_Collect3D_cFv */
void dMenu_Collect3D_c::createMirrorModel() {
static const f32 m_mirror_offset_x[5] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f};
static const f32 m_mirror_offset_y[5] = {4.0f, 4.0f, 4.0f, 4.0f, 4.0f};
static const f32 m_mirror_scale[5] = {0.6f, 0.6f, 0.6f, 0.6f, 0.6f};
static char* bck_name[4] = {
"kageri_mirrer_spin_1.bck",
"kageri_mirrer_spin_2.bck",
"kageri_mirrer_spin_3.bck",
"kageri_mirrer_spin_4.bck",
};
static char* brk_name[4] = {
"kageri_mirrer_spin_1.brk",
"kageri_mirrer_spin_2_3_4.brk",
"kageri_mirrer_spin_2_3_4.brk",
"kageri_mirrer_spin_2_3_4.brk",
};
u8 mirrorNum = getMirrorNum();
mMaskMirrorOffsetX = m_mirror_offset_x[mirrorNum];
mMaskMirrorOffsetY = m_mirror_offset_y[mirrorNum];
mMaskMirrorScale = m_mirror_scale[mirrorNum];
mMaskMirrorPos.set(0.0f, 0.0f, 0.0f);
mMaskMirrorAngle.set(0, 0, 0);
mpModel = NULL;
mpBckAnm = NULL;
mpBrkAnm = NULL;
if (mirrorNum != 0) {
setJ3D("kageri_mirrer_UI.bmd", bck_name[mirrorNum - 1], brk_name[mirrorNum - 1]);
switch (mirrorNum) {
case 1:
mpModel->getModelData()->getMaterialNodePointer(4)->getShape()->hide();
mpModel->getModelData()->getMaterialNodePointer(5)->getShape()->hide();
mpModel->getModelData()->getMaterialNodePointer(6)->getShape()->hide();
mpModel->getModelData()->getMaterialNodePointer(7)->getShape()->hide();
case 2:
mpModel->getModelData()->getMaterialNodePointer(8)->getShape()->hide();
mpModel->getModelData()->getMaterialNodePointer(9)->getShape()->hide();
mpModel->getModelData()->getMaterialNodePointer(10)->getShape()->hide();
mpModel->getModelData()->getMaterialNodePointer(11)->getShape()->hide();
case 3:
mpModel->getModelData()->getMaterialNodePointer(12)->getShape()->hide();
mpModel->getModelData()->getMaterialNodePointer(13)->getShape()->hide();
mpModel->getModelData()->getMaterialNodePointer(14)->getShape()->hide();
mpModel->getModelData()->getMaterialNodePointer(15)->getShape()->hide();
break;
}
}
}
/* 801B7434-801B749C 1B1D74 0068+00 5/5 0/0 0/0 .text getCrystalNum__17dMenu_Collect3D_cFv */
u8 dMenu_Collect3D_c::getCrystalNum() {
u8 count = 0;
for (int i = 0; i < 4; i++) {
if (!dComIfGs_isCollectCrystal(i)) {
break;
}
count++;
}
return count;
}
/* 801B749C-801B7504 1B1DDC 0068+00 5/5 0/0 0/0 .text getMirrorNum__17dMenu_Collect3D_cFv
*/
u8 dMenu_Collect3D_c::getMirrorNum() {
u8 count = 0;
for (int i = 0; i < 4; i++) {
if (!dComIfGs_isCollectMirror(i)) {
break;
}
count++;
}
return count;
}
/* 801B7504-801B75E8 1B1E44 00E4+00 4/4 0/0 0/0 .text getMaskMdlVisible__17dMenu_Collect3D_cFv */
u8 dMenu_Collect3D_c::getMaskMdlVisible() {
if ((getCrystalNum() == 0 && getMirrorNum() == 0) ||
/* dSv_event_flag_c::M_071 - Cutscene - [cutscene: 20] Zant appears (during Midna's desperate hour) */
(dComIfGs_isEventBit(0xC01) && !dComIfGs_isCollectMirror(0)) ||
/* dSv_event_flag_c::F_0354 - Cutscene - [cutscene] Mirror complete */
(dComIfGs_isEventBit(0x2B08) && !dComIfGs_isCollectCrystal(3)))
{
return 0;
}
if (dComIfGs_isCollectCrystal(3) || getMirrorNum() == 0) {
return 1;
}
return 2;
}
/* 80450720-80450728 0001A0 0004+04 1/1 0/0 1/1 .sdata mViewOffsetY__17dMenu_Collect3D_c
*/
f32 dMenu_Collect3D_c::mViewOffsetY = -100.0f;
/* 801B75E8-801B7660 1B1F28 0078+00 0/0 1/1 0/0 .text setupItem3D__17dMenu_Collect3D_cFPA4_f */
void dMenu_Collect3D_c::setupItem3D(Mtx param_0) {
GXSetViewport(0.0f, mViewOffsetY, FB_WIDTH, FB_HEIGHT, 0.0f, 1.0f);
mViewOffsetY = -100.0f;
Mtx44 projection;
C_MTXPerspective(projection, 45.0f, mDoGph_gInf_c::getAspect(), 1.0f, 100000.0f);
GXSetProjection(projection, GX_PERSPECTIVE);
calcViewMtx(param_0);
}
/* 801B7660-801B774C 1B1FA0 00EC+00 1/1 0/0 0/0 .text toItem3Dpos__17dMenu_Collect3D_cFfffP4cXyz
*/
#pragma push
#pragma optimization_level 2
void dMenu_Collect3D_c::toItem3Dpos(f32 param_0, f32 param_1, f32 param_2, cXyz* param_3) {
Mtx adStack_98;
Mtx auStack_c8;
param_0 =
(2.0f * ((param_0 - mDoGph_gInf_c::getMinXF()) / mDoGph_gInf_c::getWidthF()) - 1.0f);
param_1 = (2.0f * ((param_1 - -100.0f) / 448.0f) - 1.0f);
calcViewMtx(adStack_98);
MTXInverse(adStack_98, auStack_c8);
f32 tangent = tan(0.39269909262657166);
f32 dVar12 = -param_2;
cXyz cStack_d4((param_0 * param_2) * (mDoGph_gInf_c::getAspect() * tangent),
(tangent * (param_1 * dVar12)), dVar12);
MTXMultVec(auStack_c8, &cStack_d4, param_3);
}
#pragma pop
/* 801B774C-801B77A4 1B208C 0058+00 2/2 0/0 0/0 .text calcViewMtx__17dMenu_Collect3D_cFPA4_f */
void dMenu_Collect3D_c::calcViewMtx(Mtx param_0) {
mDoMtx_lookAt(param_0, &cXyz(0.0f, 0.0f, -1000.0f), &cXyz::Zero, &cXyz(0.0f, 1.0f, 0.0f), 0);
}
/* 801B77A4-801B78C0 1B20E4 011C+00 1/0 0/0 0/0 .text draw__20dMenu_Collect2DTop_cFv */
void dMenu_Collect2DTop_c::draw() {
J2DGrafContext* graf_port = dComIfGp_getCurrentGrafPort();
graf_port->setup2D();
mpCollect2D->getBlackTex()->draw(mDoGph_gInf_c::getMinXF(), mDoGph_gInf_c::getMinYF(),
mDoGph_gInf_c::getWidthF(), mDoGph_gInf_c::getHeightF(),
false, false, false);
if (mpCollect2D->getSaveScreen() != NULL) {
mpCollect2D->getSaveScreen()->_draw();
}
if (mpCollect2D->getOptionScreen() != NULL) {
mpCollect2D->getOptionScreen()->_draw();
}
if (mpCollect2D->getLetterScreen() != NULL) {
mpCollect2D->getLetterScreen()->_draw();
}
if (mpCollect2D->getFishingScreen() != NULL) {
mpCollect2D->getFishingScreen()->_draw();
}
if (mpCollect2D->getSkillScreen() != NULL) {
mpCollect2D->getSkillScreen()->_draw();
}
if (mpCollect2D->getInsectScreen() != NULL) {
mpCollect2D->getInsectScreen()->_draw();
}
if (mpCollect2D->getIconScreen() != NULL) {
mpCollect2D->getIconScreen()->draw(0.0f, 0.0f, graf_port);
}
}
/* 801B78C0-801B795C 1B2200 009C+00 0/0 1/1 0/0 .text
* __ct__15dMenu_Collect_cFP10JKRExpHeapP9STControlP10CSTControl */
dMenu_Collect_c::dMenu_Collect_c(JKRExpHeap* param_0, STControl* param_1, CSTControl* param_2) {
mpCollect2D = new dMenu_Collect2D_c(param_0, param_1, param_2);
mpCollect3D = new dMenu_Collect3D_c(param_0, mpCollect2D, param_2);
}
/* 801B795C-801B7A0C 1B229C 00B0+00 1/0 0/0 0/0 .text __dt__15dMenu_Collect_cFv */
dMenu_Collect_c::~dMenu_Collect_c() {
if (mpCollect2D) {
delete mpCollect2D;
mpCollect2D = NULL;
}
if (mpCollect3D) {
delete mpCollect3D;
mpCollect3D = NULL;
}
}
/* 801B7A0C-801B7A44 1B234C 0038+00 0/0 1/1 0/0 .text _create__15dMenu_Collect_cFv */
void dMenu_Collect_c::_create() {
mpCollect2D->_create();
mpCollect3D->_create();
}
/* 801B7A44-801B7A7C 1B2384 0038+00 0/0 1/1 0/0 .text _delete__15dMenu_Collect_cFv */
void dMenu_Collect_c::_delete() {
mpCollect2D->_delete();
mpCollect3D->_delete();
}
/* 801B7A7C-801B7AC0 1B23BC 0044+00 0/0 1/1 0/0 .text _move__15dMenu_Collect_cFv */
void dMenu_Collect_c::_move() {
mpCollect2D->_move();
mpCollect3D->_move(mpCollect2D->getCursorX(), mpCollect2D->getCursorY());
}
/* 801B7AC0-801B7B14 1B2400 0054+00 0/0 1/1 0/0 .text draw__15dMenu_Collect_cFv */
void dMenu_Collect_c::draw() {
dComIfGd_set2DOpa(mpCollect2D);
mpCollect3D->draw();
mpCollect2D->drawTop();
}