mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-05-24 06:50:43 -04:00
2801 lines
98 KiB
C++
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();
|
|
}
|