mirror of
https://github.com/zeldaret/ss
synced 2026-05-31 01:15:38 -04:00
215 lines
5.8 KiB
C++
215 lines
5.8 KiB
C++
#include "d/d_sc_title.h"
|
|
|
|
#include "common.h"
|
|
#include "d/d_dvd_unk.h"
|
|
#include "d/d_heap.h"
|
|
#include "d/d_message.h"
|
|
#include "d/d_pad.h"
|
|
#include "d/d_reset.h"
|
|
#include "d/d_sc_game.h"
|
|
#include "d/d_sys.h"
|
|
#include "f/f_base.h"
|
|
#include "f/f_profile_name.h"
|
|
#include "m/m_color.h"
|
|
#include "m/m_dvd.h"
|
|
#include "s/s_State.hpp"
|
|
#include "sized_string.h"
|
|
#include "toBeSorted/arc_managers/layout_arc_manager.h"
|
|
#include "toBeSorted/file_manager.h"
|
|
#include "toBeSorted/music_mgrs.h"
|
|
#include "toBeSorted/save_related.h"
|
|
#include "toBeSorted/unk_save_time.h"
|
|
|
|
SPECIAL_BASE_PROFILE(TITLE, dScTitle_c, fProfile::TITLE, 0, 0);
|
|
|
|
dScTitle_c *dScTitle_c::sInstance;
|
|
bool dScTitle_c::sPreventEmptyFilesTitle;
|
|
extern "C" {
|
|
u8 lbl_80575785;
|
|
u8 lbl_80575786;
|
|
u8 lbl_80575787;
|
|
}
|
|
|
|
static u16 sModulesToLoad[] = {
|
|
// ??? not sure what these correspond to
|
|
0x229, 0x2B0, 0x2B6, 0x2AF, 0x2B7,
|
|
};
|
|
|
|
static const char *sLayoutArcsToLoad[] = {
|
|
"Title2D",
|
|
};
|
|
|
|
STATE_VIRTUAL_DEFINE(dScTitle_c, Stanby);
|
|
STATE_VIRTUAL_DEFINE(dScTitle_c, Action);
|
|
|
|
extern "C" void *lbl_805750D8;
|
|
extern "C" void fn_80052D50(void *);
|
|
|
|
dScTitle_c::dScTitle_c() {
|
|
sInstance = this;
|
|
mRelCtrl.set(sModulesToLoad, ARRAY_LENGTH(sModulesToLoad));
|
|
mLayoutCtrl.set(sLayoutArcsToLoad, ARRAY_LENGTH(sLayoutArcsToLoad));
|
|
SaveTimeRelated::GetInstance()->fn_801907F0();
|
|
if (checkAllSaveFilesEmpty() == true) {
|
|
actuallyTriggerEntrance("F000", 0, 26, 55, 0, 0, 0, 15, -1);
|
|
} else {
|
|
actuallyTriggerEntrance("F000", 0, 28, 48, 0, 0, 0, 15, -1);
|
|
}
|
|
FileManager::GetInstance()->clearTempFileData();
|
|
FileManager::GetInstance()->initFile(1);
|
|
dDvdUnk::FontUnk::GetInstance()->fn_80052D50();
|
|
lbl_80575787 = 0;
|
|
field_0x2AC = 0;
|
|
}
|
|
|
|
dScTitle_c::~dScTitle_c() {
|
|
sInstance = nullptr;
|
|
}
|
|
|
|
extern "C" u32 TITLE_SCREEN_CHANGE;
|
|
|
|
static const char *const sFileSelect = "FileSelect";
|
|
static const char *const sSkb = "SoftwareKeyboard";
|
|
|
|
int dScTitle_c::create() {
|
|
int ret = dScGame_c::create();
|
|
if (ret == SUCCEEDED && dReset::Manage_c::GetInstance()->isSoftReset()) {
|
|
if (field_0x2AC == 0) {
|
|
dReset::Manage_c::GetInstance()->FadeOutRequest(false);
|
|
if (checkAllSaveFilesEmpty() != true) {
|
|
TITLE_SCREEN_CHANGE = 0;
|
|
}
|
|
field_0x2AC = 1;
|
|
ret = NOT_READY;
|
|
} else {
|
|
dReset::Manage_c::GetInstance()->FadeOutRequest(true);
|
|
}
|
|
}
|
|
|
|
if (ret == SUCCEEDED) {
|
|
dSys_c::setFrameRate(2);
|
|
dSys_c::setClearColor(mColor(0x00000000));
|
|
dPad::ex_c::setAutoSleepTime();
|
|
dPad::ex_c::fn_80058C90(0);
|
|
SaveRelated::create();
|
|
field_0x2AD = 0;
|
|
LayoutArcManager::GetInstance()->loadLayoutArcFromDisk(sFileSelect, nullptr);
|
|
LayoutArcManager::GetInstance()->loadLayoutArcFromDisk(sSkb, nullptr);
|
|
mDvd_toMainRam_normal_c::create2(&mpSkbArc, "/SKB/sofkeybd.arc", 0, dHeap::work2Heap.heap);
|
|
SizedString<128> fntPath;
|
|
fntPath.sprintf("/US/Font/%s/%s", dMessage_c::getLanguageIdentifier(), "normal_02.brfnt");
|
|
mDvd_toMainRam_normal_c::create2(&mpSkbFont, fntPath, 0, dHeap::work2Heap.heap);
|
|
BGM_MGR->fn_8035E310();
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
int dScTitle_c::execute() {
|
|
mFader.calc();
|
|
mStateMgr.executeState();
|
|
return SUCCEEDED;
|
|
}
|
|
|
|
int dScTitle_c::doDelete() {
|
|
int result;
|
|
result = LayoutArcManager::GetInstance()->ensureLoaded2(sFileSelect);
|
|
if (result != D_ARC_RESULT_ERROR_NOT_FOUND) {
|
|
if (result != D_ARC_RESULT_OK) {
|
|
return NOT_READY;
|
|
}
|
|
LayoutArcManager::GetInstance()->decrement(sFileSelect);
|
|
}
|
|
|
|
result = LayoutArcManager::GetInstance()->ensureLoaded2(sSkb);
|
|
if (result != D_ARC_RESULT_ERROR_NOT_FOUND) {
|
|
if (result != D_ARC_RESULT_OK) {
|
|
return NOT_READY;
|
|
}
|
|
LayoutArcManager::GetInstance()->decrement(sSkb);
|
|
}
|
|
|
|
// TODO here's the other half of the ::destroy fakematch...
|
|
if (mpSkbArc->isDone()) {
|
|
mDvd_command_c::destroy((mDvd_command_c **)&mpSkbArc);
|
|
} else {
|
|
return NOT_READY;
|
|
}
|
|
|
|
if (mpSkbFont->isDone()) {
|
|
mDvd_command_c::destroy((mDvd_command_c **)&mpSkbFont);
|
|
} else {
|
|
return NOT_READY;
|
|
}
|
|
|
|
dScGame_c::doDelete();
|
|
SaveRelated::remove();
|
|
return SUCCEEDED;
|
|
}
|
|
|
|
int dScTitle_c::draw() {
|
|
dScGame_c::draw();
|
|
return SUCCEEDED;
|
|
}
|
|
|
|
extern "C" u32 TITLE_SCREEN_CHANGE;
|
|
void dScTitle_c::loadTitleScreen(u32 params) {
|
|
FileManager::GetInstance()->updateEmptyFiles();
|
|
if (checkAllSaveFilesEmpty() == true && params != 1) {
|
|
params = 2;
|
|
}
|
|
TITLE_SCREEN_CHANGE = params;
|
|
setRootActor(fProfile::TITLE, params, 0, 0);
|
|
if (checkAllSaveFilesEmpty() == true) {
|
|
actuallyTriggerEntrance("F000", 0, 26, 55, 0, 0, 0, 15, -1);
|
|
} else {
|
|
actuallyTriggerEntrance("F000", 0, 28, 48, 0, 0, 0, 15, -1);
|
|
}
|
|
fn_80362150(ENEMY_SOUND_MGR, 30);
|
|
}
|
|
|
|
void dScTitle_c::setSomethingSkbRelated() {
|
|
if (sInstance != nullptr) {
|
|
sInstance->field_0x2AD = 1;
|
|
}
|
|
}
|
|
|
|
void dScTitle_c::initializeState_Stanby() {
|
|
dScGame_c::initializeState_Stanby();
|
|
}
|
|
|
|
void dScTitle_c::executeState_Stanby() {
|
|
dScGame_c::executeState_Stanby();
|
|
}
|
|
|
|
void dScTitle_c::finalizeState_Stanby() {
|
|
dScGame_c::finalizeState_Stanby();
|
|
}
|
|
|
|
void dScTitle_c::initializeState_Action() {
|
|
dScGame_c::initializeState_Action();
|
|
}
|
|
|
|
void dScTitle_c::executeState_Action() {
|
|
dScGame_c::executeState_Action();
|
|
}
|
|
|
|
void dScTitle_c::finalizeState_Action() {
|
|
dScGame_c::finalizeState_Action();
|
|
}
|
|
|
|
bool dScTitle_c::checkAllSaveFilesEmpty() {
|
|
FileManager *mgr = FileManager::GetInstance();
|
|
bool allEmpty = true;
|
|
for (int i = 0; i < 3; i++) {
|
|
if (!mgr->isFileEmpty(i)) {
|
|
allEmpty = false;
|
|
break;
|
|
}
|
|
}
|
|
if (!sPreventEmptyFilesTitle && allEmpty == true) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|