Files
dusklight/src/d/d_menu_collect.cpp
T
2026-04-16 22:47:02 -06:00

2801 lines
98 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 <os.h>
#include <cstring>
#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,
};
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);
}
dMenu_Collect2D_c::~dMenu_Collect2D_c() {
if (mpSubHeap) {
mDoExt_destroyExpHeap(mpSubHeap);
mpSubHeap = NULL;
}
}
#if TARGET_PC
void dMenu_Collect2D_c::menuCollectWide() {
// Main Canvas
mpScreen->scale(mDoGph_gInf_c::hudAspectScaleUp, 1.0f);
mpScreen->translate(mDoGph_gInf_c::getSafeMinXF(), 0.0f);
// Pieces of Heart
mpScreen->search(MULTI_CHAR('heart_n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// Scents
mpScreen->search(MULTI_CHAR('wolf_n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// Quiver
mpScreen->search(MULTI_CHAR('item_0_n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// Wallet
mpScreen->search(MULTI_CHAR('item_1_n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// Poes
mpScreen->search(MULTI_CHAR('item_2_n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// Fish Bestiary
mpScreen->search(MULTI_CHAR('fish_3_n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// Letters
mpScreen->search(MULTI_CHAR('lett_4_n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// Hidden Skills
mpScreen->search(MULTI_CHAR('maki_5_n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// Green Tunic
mpScreen->search(MULTI_CHAR('fuku_n0'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// Zora Armor
mpScreen->search(MULTI_CHAR('fuku_n1'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// Magic Armor
mpScreen->search(MULTI_CHAR('fuku_n2'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// Ordon Shield
mpScreen->search(MULTI_CHAR('tate_n0'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// Hylian Shield
mpScreen->search(MULTI_CHAR('tate_n1'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// Ordon Sword
mpScreen->search(MULTI_CHAR('ken_n0'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// Master Sword
mpScreen->search(MULTI_CHAR('ken_n1'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// Bugs
mpScreen->search(MULTI_CHAR('kabu_6n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// "Collection" Text
mpScreen->search(MULTI_CHAR('t_t00'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
mpScreen->search(MULTI_CHAR('f_t00'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// "Save" Text
mpScreen->search(MULTI_CHAR('sa_tex_n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// "Options" Text
mpScreen->search(MULTI_CHAR('op_tex_n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// Item Name Text
mpScreen->search(MULTI_CHAR('itemn_n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// Item Description Text
mpScreen->search(MULTI_CHAR('infotxtn'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
}
#endif
void dMenu_Collect2D_c::_create() {
mpHeap->getTotalFreeSize();
mpScreen = JKR_NEW J2DScreen();
mpScreen->setPriority("zelda_collect_soubi_screen.blo", 0x1020000,
dComIfGp_getCollectResArchive());
dPaneClass_showNullPane(mpScreen);
mpScreenIcon = JKR_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;
}
#if TARGET_PC
mpScreenIcon->translate(-mDoGph_gInf_c::getSafeMinXF(), 0.0f);
#endif
dPaneClass_showNullPane(mpScreenIcon);
#if TARGET_PC
menuCollectWide();
#endif
mpDraw2DTop = JKR_NEW dMenu_Collect2DTop_c(this);
ResTIMG* image = (ResTIMG*)dComIfGp_getMain2DArchive()->getResource('TIMG', "tt_block8x8.bti");
mpBlackTex = JKR_NEW J2DPicture(image);
mpBlackTex->setBlackWhite(JUtility::TColor(0, 0, 0, 0), JUtility::TColor(0, 0, 0, 255));
mpBlackTex->setAlpha(0);
mpDrawCursor = JKR_NEW dSelect_cursor_c(2, 1.0f, NULL);
mpString = JKR_NEW dMsgString_c();
mpSaveScrn = NULL;
mpOptionScrn = NULL;
mpLetterScrn = NULL;
mpFishingScrn = NULL;
mpSkillScrn = NULL;
mpInsectScrn = NULL;
mProcess = 0;
animationSet();
screenSet();
initialize();
setHIO(true);
}
void dMenu_Collect2D_c::_delete() {
mpHeap->getTotalFreeSize();
dMeter2Info_setCollectCursorPosXY(mCursorX, mCursorY);
JKR_DELETE(mpScreen);
mpScreen = NULL;
JKR_DELETE(mpScreenIcon);
mpScreenIcon = NULL;
for (int i = 0; i < 2; i++) {
if (mpButtonAB[i]) {
JKR_DELETE(mpButtonAB[i]);
mpButtonAB[i] = NULL;
}
if (mpButtonText[i]) {
JKR_DELETE(mpButtonText[i]);
mpButtonText[i] = NULL;
}
}
JKR_DELETE(mpDraw2DTop);
mpDraw2DTop = NULL;
JKR_DELETE(mpBlackTex);
mpBlackTex = NULL;
JKR_DELETE(mpDrawCursor);
mpDrawCursor = NULL;
JKR_DELETE(mpString);
mpString = NULL;
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (mpSaveScrn) {
mpSaveScrn->_delete();
JKR_DELETE(mpSaveScrn);
mpSaveScrn = NULL;
mpSubHeap->freeAll();
}
if (mpOptionScrn) {
mpOptionScrn->_delete();
JKR_DELETE(mpOptionScrn);
mpOptionScrn = NULL;
mpSubHeap->freeAll();
}
if (mpLetterScrn) {
JKR_DELETE(mpLetterScrn);
mpLetterScrn = NULL;
mpSubHeap->freeAll();
}
if (mpFishingScrn) {
JKR_DELETE(mpFishingScrn);
mpFishingScrn = NULL;
mpSubHeap->freeAll();
}
if (mpSkillScrn) {
JKR_DELETE(mpSkillScrn);
mpSkillScrn = NULL;
mpSubHeap->freeAll();
}
if (mpInsectScrn) {
JKR_DELETE(mpInsectScrn);
mpInsectScrn = NULL;
mpSubHeap->freeAll();
}
mDoExt_setCurrentHeap(heap);
JKR_DELETE(mpAnmKey);
mpAnmKey = NULL;
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 6; j++) {
if (mpSelPm[i][j]) {
JKR_DELETE(mpSelPm[i][j]);
mpSelPm[i][j] = NULL;
}
}
}
JKR_DELETE(mpLinkPm);
mpLinkPm = NULL;
JKR_DELETE(mpMaskPm);
mpMaskPm = NULL;
JKR_DELETE(mpModelBg);
mpModelBg = NULL;
JKR_DELETE(mpHeartParent);
mpHeartParent = NULL;
JKR_DELETE(mpHeartPiece);
mpHeartPiece = NULL;
dComIfGp_getCollectResArchive()->removeResourceAll();
}
void dMenu_Collect2D_c::initialize() {
(this->*init[mProcess])();
}
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;
}
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;
}
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,
};
void dMenu_Collect2D_c::screenSet() {
static const u64 text_sv[3] = {MULTI_CHAR('sav_0'), MULTI_CHAR('sav_1'), MULTI_CHAR('sav_2')};
static const u64 text_op[3] = {MULTI_CHAR('opt_0'), MULTI_CHAR('opt_1'), MULTI_CHAR('opt_2'),};
static const u64 ftext_sv[3] = {MULTI_CHAR('f_sav_0'), MULTI_CHAR('f_sav_1'), MULTI_CHAR('f_sav_2')};
static const u64 ftext_op[3] = {MULTI_CHAR('f_opt_0'), MULTI_CHAR('f_opt_1'), MULTI_CHAR('f_opt_2')};
static const u64 text_a_tag[5] = {MULTI_CHAR('atext1_1'), MULTI_CHAR('atext1_2'), MULTI_CHAR('atext1_3'), MULTI_CHAR('atext1_4'), MULTI_CHAR('atext1_5')};
static const u64 text_b_tag[5] = {MULTI_CHAR('btext1_1'), MULTI_CHAR('btext1_2'), MULTI_CHAR('btext1_3'), MULTI_CHAR('btext1_4'), MULTI_CHAR('btext1_5')};
#if REGION_JPN
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('t_t00')))->setFont(mDoExt_getRubyFont());
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('t_t00')))->setString(0x20, "");
dMeter2Info_getStringKanji(
0x3E1, static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('t_t00')))->getStringPtr(), NULL);
mpScreen->search(MULTI_CHAR('f_t00'))->hide();
#else
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('f_t00')))->setFont(mDoExt_getRubyFont());
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('f_t00')))->setString(0x20, "");
dMeter2Info_getStringKanji(
0x3E1, static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('f_t00')))->getStringPtr(), NULL);
mpScreen->search(MULTI_CHAR('t_t00'))->hide();
#endif
for (int i = 0; i < 3; i++) {
#if REGION_JPN
static_cast<J2DTextBox*>(mpScreen->search(text_sv[i]))->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpScreen->search(text_op[i]))->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpScreen->search(text_sv[i]))->setString(0x20, "");
static_cast<J2DTextBox*>(mpScreen->search(text_op[i]))->setString(0x20, "");
dMeter2Info_getStringKanji(
0x60, static_cast<J2DTextBox*>(mpScreen->search(text_sv[i]))->getStringPtr(), NULL);
dMeter2Info_getStringKanji(
0x5F, static_cast<J2DTextBox*>(mpScreen->search(text_op[i]))->getStringPtr(), NULL);
mpScreen->search(ftext_sv[i])->hide();
mpScreen->search(ftext_op[i])->hide();
#else
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();
#endif
}
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, "");
}
#if REGION_JPN
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('item_n00')))->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('item_n01')))->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('item_n02')))->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('item_n03')))->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('item_n00')))->setString(0x20, "");
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('item_n01')))->setString(0x20, "");
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('item_n02')))->setString(0x20, "");
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('item_n03')))->setString(0x20, "");
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('i_text1')))->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('i_text0')))->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('i_text1')))->setString(0x100, "");
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('i_text0')))->setString(0x100, "");
mpScreen->search(MULTI_CHAR('item_n04'))->hide();
mpScreen->search(MULTI_CHAR('item_n05'))->hide();
mpScreen->search(MULTI_CHAR('item_n06'))->hide();
mpScreen->search(MULTI_CHAR('item_n07'))->hide();
mpScreen->search(MULTI_CHAR('f_text1'))->hide();
mpScreen->search(MULTI_CHAR('f_text0'))->hide();
#else
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('item_n04')))->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('item_n05')))->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('item_n06')))->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('item_n07')))->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('item_n04')))->setString(0x20, "");
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('item_n05')))->setString(0x20, "");
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('item_n06')))->setString(0x20, "");
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('item_n07')))->setString(0x20, "");
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('f_text1')))->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('f_text0')))->setFont(mDoExt_getMesgFont());
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('f_text1')))->setString(0x100, "");
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('f_text0')))->setString(0x100, "");
mpScreen->search(MULTI_CHAR('item_n00'))->hide();
mpScreen->search(MULTI_CHAR('item_n01'))->hide();
mpScreen->search(MULTI_CHAR('item_n02'))->hide();
mpScreen->search(MULTI_CHAR('item_n03'))->hide();
mpScreen->search(MULTI_CHAR('i_text1'))->hide();
mpScreen->search(MULTI_CHAR('i_text0'))->hide();
#endif
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(MULTI_CHAR('ken_00'))->hide();
mpScreen->search(MULTI_CHAR('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(MULTI_CHAR('ken_00'))->show();
mpScreen->search(MULTI_CHAR('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(MULTI_CHAR('tate_00'))->show();
mpScreen->search(MULTI_CHAR('tate_01'))->hide();
} else if (dComIfGs_isItemFirstBit(0x2A)) {
mpScreen->search(MULTI_CHAR('tate_00'))->hide();
mpScreen->search(MULTI_CHAR('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() == dItemNo_WEAR_CASUAL_e) {
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(dItemNo_BOW_e, 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() != dItemNo_NONE_e) {
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 TARGET_PC // Since we allow changing wallet sizes, do something more robust.
if (dComIfGs_getWalletSize() == WALLET) {
field_0x184[0][3] = 0x199;
} else if (dComIfGs_getWalletSize() == BIG_WALLET) {
field_0x184[0][3] = 0x19a;
} else {
field_0x184[0][3] = 0x19b;
}
#else
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;
}
#endif
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] = JKR_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 = JKR_NEW CPaneMgr(mpScreen, MULTI_CHAR('linki_n'), 0, NULL);
mLinkGlobalCenterPos.x = mpLinkPm->getInitGlobalCenterPosX();
mLinkGlobalCenterPos.y = mpLinkPm->getInitGlobalCenterPosY();
mLinkGlobalCenterPos.z = -1000.0f;
mpMaskPm = JKR_NEW CPaneMgr(mpScreen, MULTI_CHAR('kamen_n'), 0, NULL);
mpModelBg = JKR_NEW CPaneMgr(mpScreen, MULTI_CHAR('modelbgn'), 2, NULL);
mpHeartParent = JKR_NEW CPaneMgr(mpScreen, MULTI_CHAR('heart_n'), 0, NULL);
mpHeartPiece = JKR_NEW CPaneMgr(mpScreen, MULTI_CHAR('heart_kn'), 0, NULL);
setAButtonString(mCurrentAString);
setBButtonString(mCurrentBString);
setItemNameString(mCursorX, mCursorY);
cursorPosSet();
setArrowMaxNum(dComIfGs_getArrowMax());
#if TARGET_PC
setWalletSizeNum(dComIfGs_getWalletSize());
#else
setWalletMaxNum(dComIfGs_getRupeeMax());
#endif
setSmellType();
setHeartPiece();
setPohMaxNum(dComIfGs_getPohSpiritNum());
}
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;
}
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(MULTI_CHAR('modelbg0')))->setAnimation(i_SRTKey);
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('modelbg1')))->setAnimation(i_SRTKey);
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('modelbg2')))->setAnimation(i_SRTKey);
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('modelbg3')))->setAnimation(i_SRTKey);
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('modelbg4')))->setAnimation(i_SRTKey);
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('modelbg5')))->setAnimation(i_SRTKey);
}
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);
}
// 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);
}
}
}
}
}
}
}
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) {
#if TARGET_PC
mpDrawCursor->setParam(1.1f * mDoGph_gInf_c::hudAspectScaleUp, 0.85f, 0.05f, 0.5f, 0.5f);
#else
mpDrawCursor->setParam(1.1f, 0.85f, 0.05f, 0.5f, 0.5f);
#endif
} else if (mCursorX == 6 && mCursorY == 0) {
#if TARGET_PC
mpDrawCursor->setParam(0.6f * mDoGph_gInf_c::hudAspectScaleUp, 0.85f, 0.03f, 0.6f, 0.6f);
#else
mpDrawCursor->setParam(0.6f, 0.85f, 0.03f, 0.6f, 0.6f);
#endif
} else {
#if TARGET_PC
mpDrawCursor->setParam(1.0f * mDoGph_gInf_c::hudAspectScaleUp, 1.0f, 0.1f, 0.7f, 0.7f);
#else
mpDrawCursor->setParam(1.0f, 1.0f, 0.1f, 0.7f, 0.7f);
#endif
}
}
void dMenu_Collect2D_c::changeSword() {
switch (mCursorX) {
case 3:
if (dComIfGs_isItemFirstBit(dItemNo_SWORD_e)) {
if (dComIfGs_getSelectEquipSword() != dItemNo_SWORD_e) {
dMeter2Info_setSword(dItemNo_SWORD_e, false);
setEquipItemFrameColorSword(0);
mDoAud_seStart(Z2SE_SY_ITEM_SET_X, NULL, 0, 0);
dMeter2Info_set2DVibration();
}
} else if (dComIfGs_getSelectEquipSword() != dItemNo_WOOD_STICK_e) {
dMeter2Info_setSword(dItemNo_WOOD_STICK_e, 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(dItemNo_LIGHT_SWORD_e)) {
if (dComIfGs_getSelectEquipSword() != dItemNo_LIGHT_SWORD_e) {
dMeter2Info_setSword(dItemNo_LIGHT_SWORD_e, 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() != dItemNo_MASTER_SWORD_e) {
dMeter2Info_setSword(dItemNo_MASTER_SWORD_e, 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() != dItemNo_LIGHT_SWORD_e) {
dMeter2Info_setSword(dItemNo_LIGHT_SWORD_e, 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;
}
}
void dMenu_Collect2D_c::changeShield() {
switch (mCursorX) {
case 3:
if (dComIfGs_isItemFirstBit(dItemNo_SHIELD_e)) {
if (dComIfGs_getSelectEquipShield() != dItemNo_SHIELD_e) {
dMeter2Info_setShield(dItemNo_SHIELD_e, 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(dItemNo_WOOD_SHIELD_e)) {
if (dComIfGs_getSelectEquipShield() != dItemNo_WOOD_SHIELD_e) {
dMeter2Info_setShield(dItemNo_WOOD_SHIELD_e, 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() != dItemNo_HYLIA_SHIELD_e) {
dMeter2Info_setShield(dItemNo_HYLIA_SHIELD_e, 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;
}
}
void dMenu_Collect2D_c::changeClothe() {
switch (mCursorX) {
case 3:
if (dComIfGs_getSelectEquipClothes() != dItemNo_WEAR_KOKIRI_e) {
dMeter2Info_setCloth(dItemNo_WEAR_KOKIRI_e, 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() != dItemNo_WEAR_ZORA_e) {
dMeter2Info_setCloth(dItemNo_WEAR_ZORA_e, 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() != dItemNo_ARMOR_e) {
dMeter2Info_setCloth(dItemNo_ARMOR_e, 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;
}
}
void dMenu_Collect2D_c::setArrowMaxNum(u8 param_0) {
switch (param_0) {
case 0:
mpScreen->search(MULTI_CHAR('item_0_0'))->hide();
mpScreen->search(MULTI_CHAR('item_0_1'))->hide();
mpScreen->search(MULTI_CHAR('item_0_2'))->hide();
break;
case 30:
mpScreen->search(MULTI_CHAR('item_0_0'))->show();
mpScreen->search(MULTI_CHAR('item_0_1'))->hide();
mpScreen->search(MULTI_CHAR('item_0_2'))->hide();
break;
case 60:
mpScreen->search(MULTI_CHAR('item_0_0'))->hide();
mpScreen->search(MULTI_CHAR('item_0_1'))->show();
mpScreen->search(MULTI_CHAR('item_0_2'))->hide();
break;
case 100:
mpScreen->search(MULTI_CHAR('item_0_0'))->hide();
mpScreen->search(MULTI_CHAR('item_0_1'))->hide();
mpScreen->search(MULTI_CHAR('item_0_2'))->show();
break;
}
}
#if TARGET_PC
void dMenu_Collect2D_c::setWalletSizeNum(u16 i_walletSize) {
switch (i_walletSize) {
case WALLET:
mpScreen->search(MULTI_CHAR('item_1_0'))->show();
mpScreen->search(MULTI_CHAR('item_1_1'))->hide();
mpScreen->search(MULTI_CHAR('item_1_2'))->hide();
break;
case BIG_WALLET:
mpScreen->search(MULTI_CHAR('item_1_0'))->hide();
mpScreen->search(MULTI_CHAR('item_1_1'))->show();
mpScreen->search(MULTI_CHAR('item_1_2'))->hide();
break;
case GIANT_WALLET:
mpScreen->search(MULTI_CHAR('item_1_0'))->hide();
mpScreen->search(MULTI_CHAR('item_1_1'))->hide();
mpScreen->search(MULTI_CHAR('item_1_2'))->show();
break;
}
}
#else
void dMenu_Collect2D_c::setWalletMaxNum(u16 i_walletSize) {
switch (i_walletSize) {
case 300:
mpScreen->search(MULTI_CHAR('item_1_0'))->show();
mpScreen->search(MULTI_CHAR('item_1_1'))->hide();
mpScreen->search(MULTI_CHAR('item_1_2'))->hide();
break;
case 600:
mpScreen->search(MULTI_CHAR('item_1_0'))->hide();
mpScreen->search(MULTI_CHAR('item_1_1'))->show();
mpScreen->search(MULTI_CHAR('item_1_2'))->hide();
break;
case 1000:
mpScreen->search(MULTI_CHAR('item_1_0'))->hide();
mpScreen->search(MULTI_CHAR('item_1_1'))->hide();
mpScreen->search(MULTI_CHAR('item_1_2'))->show();
break;
}
}
#endif
void dMenu_Collect2D_c::setSmellType() {
static const u64 smell_tag[5] = {
MULTI_CHAR('wolf_med'), MULTI_CHAR('wolf_chi'), MULTI_CHAR('wolf_fis'), MULTI_CHAR('wolf_iri'), MULTI_CHAR('wolf_pou'),
};
s32 smellType = -1;
switch (dComIfGs_getCollectSmell()) {
case dItemNo_SMELL_YELIA_POUCH_e:
smellType = 3;
break;
case dItemNo_SMELL_POH_e:
smellType = 4;
break;
case dItemNo_SMELL_FISH_e:
smellType = 2;
break;
case dItemNo_SMELL_CHILDREN_e:
smellType = 1;
break;
case dItemNo_SMELL_MEDICINE_e:
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();
}
}
}
void dMenu_Collect2D_c::setHeartPiece() {
static const u64 heart_tag[4] = {
MULTI_CHAR('heart_1n'),
MULTI_CHAR('heart_2n'),
MULTI_CHAR('heart_3n'),
MULTI_CHAR('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();
}
}
}
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(MULTI_CHAR('item2_3')))->changeTexture(timg, 0);
check = 1;
} else {
mpScreen->search(MULTI_CHAR('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(MULTI_CHAR('item2_2')))->changeTexture(timg2, 0);
} else {
mpScreen->search(MULTI_CHAR('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(MULTI_CHAR('item2_1')))->changeTexture(timg3, 0);
} else {
mpScreen->search(MULTI_CHAR('item2_3'))->hide();
mpScreen->search(MULTI_CHAR('item2_2'))->hide();
mpScreen->search(MULTI_CHAR('item2_1'))->hide();
}
}
void dMenu_Collect2D_c::setEquipItemFrameColorSword(int i_frame) {
static const u64 tag[2] = {
MULTI_CHAR('ken_g_0'),
MULTI_CHAR('ken_g_1'),
};
if (i_frame == -1) {
if (mEquippedSword != dComIfGs_getSelectEquipSword()) {
mEquippedSword = dComIfGs_getSelectEquipSword();
switch (mEquippedSword) {
case dItemNo_SWORD_e:
i_frame = 0;
break;
case dItemNo_WOOD_STICK_e:
i_frame = 0;
break;
case dItemNo_MASTER_SWORD_e:
i_frame = 1;
break;
case dItemNo_LIGHT_SWORD_e:
if (dComIfGs_isItemFirstBit(dItemNo_LIGHT_SWORD_e)) {
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));
}
}
}
}
void dMenu_Collect2D_c::setEquipItemFrameColorShield(int i_frame) {
static const u64 tag[2] = {
MULTI_CHAR('tate_g_0'),
MULTI_CHAR('tate_g_1'),
};
if (i_frame == -1) {
if (mEquippedShield != dComIfGs_getSelectEquipShield()) {
mEquippedShield = dComIfGs_getSelectEquipShield();
switch (mEquippedShield) {
case dItemNo_SHIELD_e:
case dItemNo_WOOD_SHIELD_e:
i_frame = 0;
break;
case dItemNo_HYLIA_SHIELD_e:
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));
}
}
}
}
void dMenu_Collect2D_c::setEquipItemFrameColorClothes(int i_frame) {
static const u64 tag[3] = {
MULTI_CHAR('fuku_g_0'),
MULTI_CHAR('fuku_g_1'),
MULTI_CHAR('fuku_g_2'),
};
if (i_frame == -1) {
if (mEquippedClothes != dComIfGs_getSelectEquipClothes()) {
mEquippedClothes = dComIfGs_getSelectEquipClothes();
switch (mEquippedClothes) {
case dItemNo_WEAR_KOKIRI_e:
i_frame = 0;
break;
case dItemNo_WEAR_ZORA_e:
i_frame = 1;
break;
case dItemNo_ARMOR_e:
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));
}
}
}
}
void dMenu_Collect2D_c::setHIO(bool i_useHIO) {
static const u64 kaz_n[9] = {
MULTI_CHAR('uzu_00'), MULTI_CHAR('uzu_01'), MULTI_CHAR('uzu_02'), MULTI_CHAR('uzu_03'), MULTI_CHAR('uzu_04'), MULTI_CHAR('uzu_05'), MULTI_CHAR('uzu_06'), MULTI_CHAR('uzu_07'), MULTI_CHAR('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(MULTI_CHAR('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);
}
}
}
u64 dMenu_Collect2D_c::getItemTag(int i_tag1, int i_tag2, bool param_3) {
static const u64 itemTag[6][7] = {
{0, 0, 0, MULTI_CHAR('ken_n0'), MULTI_CHAR('ken_n1'), MULTI_CHAR('heart_kn'), MULTI_CHAR('kamen_n')},
{0, 0, 0, MULTI_CHAR('tate_n0'), MULTI_CHAR('tate_n1')},
{
0,
0,
0,
MULTI_CHAR('fuku_n0'),
MULTI_CHAR('fuku_n1'),
MULTI_CHAR('fuku_n2'),
},
{
MULTI_CHAR('item_1_n'),
MULTI_CHAR('item_0_n'),
MULTI_CHAR('kabu_6n'),
MULTI_CHAR('maki_5_n'),
},
{
MULTI_CHAR('wolf_n'),
MULTI_CHAR('item_2_n'),
MULTI_CHAR('fish_3_n'),
MULTI_CHAR('lett_4_n'),
},
{MULTI_CHAR('save_n'), MULTI_CHAR('option_n')},
};
if (i_tag2 == 5 && !param_3) {
return 0;
}
return itemTag[i_tag2][i_tag1];
}
void dMenu_Collect2D_c::wait_init() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (mpSaveScrn != NULL) {
mpSaveScrn->_delete();
JKR_DELETE(mpSaveScrn);
mpSaveScrn = NULL;
mpSubHeap->freeAll();
}
if (mpOptionScrn != NULL) {
mpOptionScrn->_delete();
JKR_DELETE(mpOptionScrn);
mpOptionScrn = NULL;
mpSubHeap->freeAll();
}
if (mpLetterScrn != NULL) {
JKR_DELETE(mpLetterScrn);
mpLetterScrn = NULL;
mpSubHeap->freeAll();
}
if (mpFishingScrn != NULL) {
JKR_DELETE(mpFishingScrn);
mpFishingScrn = NULL;
mpSubHeap->freeAll();
}
if (mpSkillScrn != NULL) {
JKR_DELETE(mpSkillScrn);
mpSkillScrn = NULL;
mpSubHeap->freeAll();
}
if (mpInsectScrn != NULL) {
JKR_DELETE(mpInsectScrn);
mpInsectScrn = NULL;
mpSubHeap->freeAll();
}
mDoExt_setCurrentHeap(heap);
}
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);
}
}
void dMenu_Collect2D_c::save_open_init() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (!mpSaveScrn) {
mpSaveScrn = JKR_NEW dMenu_save_c();
}
mpSaveScrn->setUseType(1);
mpSaveScrn->_create();
mpSaveScrn->initialize();
setAButtonString(0);
setBButtonString(0);
mpDrawCursor->offPlayAllAnime();
mDoExt_setCurrentHeap(heap);
}
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);
}
void dMenu_Collect2D_c::save_move_init() {
setAButtonString(0x040c);
setBButtonString(0);
}
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);
}
void dMenu_Collect2D_c::save_close_init() {
setAButtonString(0);
setBButtonString(0);
}
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);
}
void dMenu_Collect2D_c::option_open_init() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (!mpOptionScrn) {
mpOptionScrn = JKR_NEW dMenu_Option_c(dComIfGp_getCollectResArchive(), mpStick);
}
mpOptionScrn->initialize();
setAButtonString(0);
setBButtonString(0);
mpDrawCursor->offPlayAllAnime();
mDoExt_setCurrentHeap(heap);
}
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);
}
void dMenu_Collect2D_c::option_move_init() {
setAButtonString(0x040c);
setBButtonString(0x03f9);
}
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);
}
void dMenu_Collect2D_c::option_close_init() {
setAButtonString(0);
setBButtonString(0);
}
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);
}
void dMenu_Collect2D_c::letter_open_init() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (!mpLetterScrn) {
mpLetterScrn = JKR_NEW dMenu_Letter_c(mpSubHeap, mpStick, mpCStick);
}
setAButtonString(0);
setBButtonString(0);
mpDrawCursor->offPlayAllAnime();
mDoExt_setCurrentHeap(heap);
}
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);
}
void dMenu_Collect2D_c::letter_move_init() {
setAButtonString(0x040c);
setBButtonString(0x03f9);
}
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);
}
void dMenu_Collect2D_c::letter_close_init() {
setAButtonString(0);
setBButtonString(0);
}
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);
}
void dMenu_Collect2D_c::fishing_open_init() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (!mpFishingScrn) {
mpFishingScrn = JKR_NEW dMenu_Fishing_c(mpSubHeap, mpStick, mpCStick);
}
setAButtonString(0);
setBButtonString(0);
mpDrawCursor->offPlayAllAnime();
mDoExt_setCurrentHeap(heap);
}
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);
}
void dMenu_Collect2D_c::fishing_move_init() {
setAButtonString(0x040c);
setBButtonString(0x03f9);
}
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);
}
void dMenu_Collect2D_c::fishing_close_init() {
setAButtonString(0);
setBButtonString(0);
}
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);
}
void dMenu_Collect2D_c::skill_open_init() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (!mpSkillScrn) {
mpSkillScrn = JKR_NEW dMenu_Skill_c(mpSubHeap, mpStick, mpCStick);
}
setAButtonString(0);
setBButtonString(0);
mpDrawCursor->offPlayAllAnime();
mDoExt_setCurrentHeap(heap);
}
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);
}
void dMenu_Collect2D_c::skill_move_init() {
setAButtonString(0x040c);
setBButtonString(0x03f9);
}
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);
}
void dMenu_Collect2D_c::skill_close_init() {
setAButtonString(0);
setBButtonString(0);
}
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);
}
void dMenu_Collect2D_c::insect_open_init() {
JKRHeap* heap = mDoExt_setCurrentHeap(mpSubHeap);
if (!mpInsectScrn) {
mpInsectScrn = JKR_NEW dMenu_Insect_c(mpSubHeap, mpStick, mpCStick, 0);
}
setAButtonString(0);
setBButtonString(0);
mpDrawCursor->offPlayAllAnime();
mDoExt_setCurrentHeap(heap);
}
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);
}
void dMenu_Collect2D_c::insect_move_init() {
setAButtonString(0x040c);
setBButtonString(0x03f9);
}
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);
}
void dMenu_Collect2D_c::insect_close_init() {
setAButtonString(0);
setBButtonString(0);
}
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);
}
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);
}
void dMenu_Collect2D_c::_draw() {
#if TARGET_PC
menuCollectWide();
#endif
J2DGrafContext* grafPort = dComIfGp_getCurrentGrafPort();
grafPort->setup2D();
mpScreen->draw(0.0f, 0.0f, grafPort);
if (mItemNameString == 0) {
#if REGION_JPN
char* stringPtr1 = static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('i_text1')))->getStringPtr();
#else
char* stringPtr1 = static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('f_text1')))->getStringPtr();
#endif
strcpy(stringPtr1, "");
#if REGION_JPN
char* stringPtr0 = static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('i_text0')))->getStringPtr();
#else
char* stringPtr0 = static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('f_text0')))->getStringPtr();
#endif
strcpy(stringPtr0, "");
} else {
#if REGION_JPN
J2DTextBox* textBox1 = static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('i_text1')));
#else
J2DTextBox* textBox1 = static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('f_text1')));
#endif
mpString->getString(mItemNameString, textBox1, NULL, NULL, NULL, 0);
#if REGION_JPN
J2DTextBox* textBox0 = static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('i_text0')));
#else
J2DTextBox* textBox0 = static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('f_text0')));
#endif
mpString->getString(mItemNameString, textBox0, NULL, NULL, NULL, 0);
#if REGION_JPN
textBox0 = static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('i_text0')));
#else
textBox0 = static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('f_text0')));
#endif
mpString->drawOutFontLocal(textBox0, -1.0f);
}
mpDrawCursor->draw();
}
void dMenu_Collect2D_c::drawTop() {
dComIfGd_set2DOpaTop(mpDraw2DTop);
}
bool dMenu_Collect2D_c::isKeyCheck() {
if (mProcess || field_0x25f) {
return true;
}
return false;
}
bool dMenu_Collect2D_c::isOutCheck() {
return false;
}
void dMenu_Collect2D_c::setAButtonString(u16 i_stringID) {
static const u64 text_a_tag[5] = {
MULTI_CHAR('atext1_1'), MULTI_CHAR('atext1_2'), MULTI_CHAR('atext1_3'), MULTI_CHAR('atext1_4'), MULTI_CHAR('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);
}
}
}
}
void dMenu_Collect2D_c::setBButtonString(u16 i_stringID) {
static const u64 text_b_tag[5] = {
MULTI_CHAR('btext1_1'), MULTI_CHAR('btext1_2'), MULTI_CHAR('btext1_3'), MULTI_CHAR('btext1_4'), MULTI_CHAR('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);
}
}
}
}
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 {
#if REGION_JPN
char* stringPtr =
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('item_n00')))->getStringPtr();
dMeter2Info_getStringKanji(uVar6, stringPtr, NULL);
stringPtr = static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('item_n01')))->getStringPtr();
dMeter2Info_getStringKanji(uVar6, stringPtr, NULL);
stringPtr = static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('item_n02')))->getStringPtr();
dMeter2Info_getStringKanji(uVar6, stringPtr, NULL);
stringPtr = static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('item_n03')))->getStringPtr();
dMeter2Info_getStringKanji(uVar6, stringPtr, NULL);
#else
char* stringPtr =
static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('item_n04')))->getStringPtr();
dMeter2Info_getStringKanji(uVar6, stringPtr, NULL);
stringPtr = static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('item_n05')))->getStringPtr();
dMeter2Info_getStringKanji(uVar6, stringPtr, NULL);
stringPtr = static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('item_n06')))->getStringPtr();
dMeter2Info_getStringKanji(uVar6, stringPtr, NULL);
stringPtr = static_cast<J2DTextBox*>(mpScreen->search(MULTI_CHAR('item_n07')))->getStringPtr();
dMeter2Info_getStringKanji(uVar6, stringPtr, NULL);
#endif
}
}
}
void dMenu_Collect2D_c::setItemNameStringNull() {
mItemNameString = 0;
#if REGION_JPN
J2DTextBox* textBox = (J2DTextBox*)mpScreen->search(MULTI_CHAR('item_n00'));
strcpy(textBox->getStringPtr(), "");
textBox = (J2DTextBox*)mpScreen->search(MULTI_CHAR('item_n01'));
strcpy(textBox->getStringPtr(), "");
textBox = (J2DTextBox*)mpScreen->search(MULTI_CHAR('item_n02'));
strcpy(textBox->getStringPtr(), "");
textBox = (J2DTextBox*)mpScreen->search(MULTI_CHAR('item_n03'));
#else
J2DTextBox* textBox = (J2DTextBox*)mpScreen->search(MULTI_CHAR('item_n04'));
strcpy(textBox->getStringPtr(), "");
textBox = (J2DTextBox*)mpScreen->search(MULTI_CHAR('item_n05'));
strcpy(textBox->getStringPtr(), "");
textBox = (J2DTextBox*)mpScreen->search(MULTI_CHAR('item_n06'));
strcpy(textBox->getStringPtr(), "");
textBox = (J2DTextBox*)mpScreen->search(MULTI_CHAR('item_n07'));
#endif
strcpy(textBox->getStringPtr(), "");
}
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;
}
dMenu_Collect3D_c::~dMenu_Collect3D_c() {
if (mpSolidHeap) {
mDoExt_destroySolidHeap(mpSolidHeap);
mpSolidHeap = NULL;
}
}
void dMenu_Collect3D_c::_create() {
mpHeap->getTotalFreeSize();
mpSolidHeap = mDoExt_createSolidHeapToCurrent(0x25800, mpHeap, 0x20);
JKRHEAP_NAME(mpSolidHeap, "dMenu_Collect3D_c::mpSolidHeap");
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());
}
void dMenu_Collect3D_c::_delete() {
if (daAlink_getAlinkActorClass()) {
daAlink_getAlinkActorClass()->resetStatusWindow();
}
}
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;
ANGLE_ADD(mLinkAngle, 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();
}
}
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();
}
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 = JKR_NEW J3DMaterialAnm();
modelData->getMaterialNodePointer(i)->change();
modelData->getMaterialNodePointer(i)->setMaterialAnm(matAnm);
}
mpModel = JKR_NEW J3DModel(modelData, 0, 1);
if (param_1 != NULL) {
J3DAnmTransform* pbck = (J3DAnmTransform*)J3DAnmLoaderDataBase::load(
resArchive->getResource('BCK ', param_1), J3DLOADER_UNK_FLAG0);
mpBckAnm = JKR_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 = JKR_NEW mDoExt_brkAnm();
if (mpBrkAnm == NULL || !mpBrkAnm->init(modelData, pbrk, -1, 2, 1.0f, 0, -1)) {
return;
}
}
}
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());
}
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();
}
}
void dMenu_Collect3D_c::animeEntry() {
if (mpBrkAnm != NULL) {
mpBrkAnm->entry(mpModel->getModelData());
}
if (mpBckAnm != NULL) {
mpBckAnm->entry(mpModel->getModelData());
}
}
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;
}
}
}
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;
}
}
}
u8 dMenu_Collect3D_c::getCrystalNum() {
u8 count = 0;
for (int i = 0; i < 4; i++) {
if (!dComIfGs_isCollectCrystal(i)) {
break;
}
count++;
}
return count;
}
u8 dMenu_Collect3D_c::getMirrorNum() {
u8 count = 0;
for (int i = 0; i < 4; i++) {
if (!dComIfGs_isCollectMirror(i)) {
break;
}
count++;
}
return count;
}
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;
}
f32 dMenu_Collect3D_c::mViewOffsetY = -100.0f;
void dMenu_Collect3D_c::setupItem3D(Mtx param_0) {
#if TARGET_PC
f32 scaleFactor = mDoGph_gInf_c::getHeight() / FB_HEIGHT;
GXSetViewport(0.0f, mViewOffsetY * scaleFactor, mDoGph_gInf_c::getWidth(), mDoGph_gInf_c::getHeight(), 0.0f, 1.0f);
#else
GXSetViewport(0.0f, mViewOffsetY, FB_WIDTH, FB_HEIGHT, 0.0f, 1.0f);
#endif
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);
}
#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;
#if TARGET_PC
param_0 =
(2.0f * ((param_0 - mDoGph_gInf_c::getSafeMinXF()) / mDoGph_gInf_c::getSafeWidthF()) -
1.0f);
#else
param_0 =
(2.0f * ((param_0 - mDoGph_gInf_c::getMinXF()) / mDoGph_gInf_c::getWidthF()) - 1.0f);
#endif
param_1 = (2.0f * ((param_1 - -100.0f) / FB_HEIGHT_BASE) - 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
void dMenu_Collect3D_c::calcViewMtx(Mtx param_0) {
cXyz pos1(0.0f, 0.0f, -1000.0f);
cXyz pos2(0.0f, 1.0f, 0.0f);
mDoMtx_lookAt(param_0, &pos1, &cXyz::Zero, &pos2, 0);
}
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);
}
}
dMenu_Collect_c::dMenu_Collect_c(JKRExpHeap* param_0, STControl* param_1, CSTControl* param_2) {
mpCollect2D = JKR_NEW dMenu_Collect2D_c(param_0, param_1, param_2);
mpCollect3D = JKR_NEW dMenu_Collect3D_c(param_0, mpCollect2D, param_2);
}
dMenu_Collect_c::~dMenu_Collect_c() {
if (mpCollect2D) {
JKR_DELETE(mpCollect2D);
mpCollect2D = NULL;
}
if (mpCollect3D) {
JKR_DELETE(mpCollect3D);
mpCollect3D = NULL;
}
}
void dMenu_Collect_c::_create() {
mpCollect2D->_create();
mpCollect3D->_create();
}
void dMenu_Collect_c::_delete() {
mpCollect2D->_delete();
mpCollect3D->_delete();
}
void dMenu_Collect_c::_move() {
mpCollect2D->_move();
mpCollect3D->_move(mpCollect2D->getCursorX(), mpCollect2D->getCursorY());
}
void dMenu_Collect_c::draw() {
dComIfGd_set2DOpa(mpCollect2D);
mpCollect3D->draw();
mpCollect2D->drawTop();
}