summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhatal175 <hatal175@users.noreply.github.com>2024-10-18 00:21:08 +0300
committerGitHub <noreply@github.com>2024-10-17 14:21:08 -0700
commit38445f4d516dbc802670def3d4d6fc3d9eb1317c (patch)
tree0cb539a25bc74a540a75be52a9ddc8b405f4d337
parent2aa441e40bcc0a8fd369e41a69729e6c34d8c3b2 (diff)
Work on d_a_title (#2215)
-rw-r--r--.clangd2
-rw-r--r--include/JSystem/JGadget/binary.h19
-rw-r--r--include/JSystem/JStudio/JStudio/stb.h23
-rw-r--r--include/d/actor/d_a_title.h2
-rw-r--r--include/d/d_demo.h2
-rw-r--r--src/d/actor/d_a_title.cpp209
6 files changed, 90 insertions, 167 deletions
diff --git a/.clangd b/.clangd
index 772ac0c52a..3fcffed06b 100644
--- a/.clangd
+++ b/.clangd
@@ -1,2 +1,2 @@
CompileFlags:
- Add: [-Wno-c++11-compat-deprecated-writable-strings]
+ Add: [-Wno-c++11-compat-deprecated-writable-strings, -Wno-extern-initializer]
diff --git a/include/JSystem/JGadget/binary.h b/include/JSystem/JGadget/binary.h
index 26d29d1fbf..89df9d4745 100644
--- a/include/JSystem/JGadget/binary.h
+++ b/include/JSystem/JGadget/binary.h
@@ -62,6 +62,7 @@ struct TParse_header_block {
template <typename T>
struct TParseValue_raw_ {
+ typedef T ParseType;
static T parse(const void* data) { return *(T*)data; }
};
@@ -83,6 +84,24 @@ struct TParseValue : public Parser<T> {
}
};
+template<class Parser, int size>
+struct TValueIterator {
+ TValueIterator(const void* begin) {
+ mBegin = begin;
+ }
+
+ typename Parser::ParseType operator*() {
+ return *(typename Parser::ParseType*)mBegin;
+ }
+
+ const void* mBegin;
+};
+
+template<typename T>
+struct TValueIterator_raw : public TValueIterator<TParseValue_raw_<u8>, 1> {
+ TValueIterator_raw(const void* begin) : TValueIterator<TParseValue_raw_<u8>, 1>(begin) {}
+};
+
} // namespace binary
} // namespace JGadget
diff --git a/include/JSystem/JStudio/JStudio/stb.h b/include/JSystem/JStudio/JStudio/stb.h
index fe32991cfe..ea299a709c 100644
--- a/include/JSystem/JStudio/JStudio/stb.h
+++ b/include/JSystem/JStudio/JStudio/stb.h
@@ -157,43 +157,44 @@ private:
};
template <int T>
-struct TParseData {
+struct TParseData : public data::TParse_TParagraph_data::TData {
TParseData(const void* pContent) {
data::TParse_TParagraph_data data(pContent);
set(data);
}
void set(const data::TParse_TParagraph_data& data) {
- //data::TParse_TParagraph_data::TData* p = (data::TParse_TParagraph_data::TData*)this;
- data.getData(m_data);
+ data.getData(this);
}
bool isEnd() const {
- return m_data->_0 == 0;
+ return _0 == 0;
}
bool empty() const {
- return m_data->_c == NULL;
+ return _c == NULL;
}
bool isValid() const {
- return !empty() && m_data->_0 == 50;
+ return !empty() && _0 == 50;
}
-
- data::TParse_TParagraph_data::TData* m_data;
};
-template <int T>
+template <int T, class Iterator=JGadget::binary::TValueIterator_raw<u8> >
struct TParseData_fixed : public TParseData<T> {
- TParseData_fixed(const void* pContent) : TParseData(pContent) {}
+ TParseData_fixed(const void* pContent) : TParseData<T>(pContent) {}
const void* getNext() const {
- return m_data->_c;
+ return fileCount;
}
bool isValid() const {
return TParseData::isValid() && getNext() != NULL;
}
+
+ Iterator begin() {
+ return Iterator(fileCount);
+ }
};
} // namespace stb
diff --git a/include/d/actor/d_a_title.h b/include/d/actor/d_a_title.h
index beca3f1215..1da6096702 100644
--- a/include/d/actor/d_a_title.h
+++ b/include/d/actor/d_a_title.h
@@ -77,7 +77,7 @@ class daTit_HIO_c {
public:
/* 80D66B0C */ daTit_HIO_c();
- /* 80D67A08 */ virtual ~daTit_HIO_c();
+ /* 80D67A08 */ virtual ~daTit_HIO_c() {}
/* 0x04 */ s8 field_0x4;
/* 0x08 */ f32 mPSScaleX;
diff --git a/include/d/d_demo.h b/include/d/d_demo.h
index 2f838d0ef2..e334bcadca 100644
--- a/include/d/d_demo.h
+++ b/include/d/d_demo.h
@@ -42,6 +42,7 @@ public:
class dDemo_prm_c {
public:
dDemo_prm_c() { mData = 0; }
+ u32 getData() { return mData; }
/* 0x0 */ u32 field_0x0;
/* 0x4 */ u32 mData;
@@ -85,6 +86,7 @@ public:
void setOldAnmId(u32 id) { mOldAnmId = id; }
void setAnmFrameMax(f32 max) { mAnmFrameMax = max; }
f32 getAnmFrame() { return mAnmFrame; }
+ dDemo_prm_c* getPrm() { return &mPrm; }
private:
/* 0x04 */ u16 mFlags;
diff --git a/src/d/actor/d_a_title.cpp b/src/d/actor/d_a_title.cpp
index 86f6899675..34c7470e0d 100644
--- a/src/d/actor/d_a_title.cpp
+++ b/src/d/actor/d_a_title.cpp
@@ -3,7 +3,12 @@
// Translation Unit: d_a_title
//
+//
+// Issues with ~dDlst_daTitle_c appearing after create rather than end of TU
+//
+
#include "d/actor/d_a_title.h"
+#include "d/d_demo.h"
#include "d/d_pane_class_alpha.h"
#include "d/d_menu_collect.h"
#include "m_Do/m_Do_Reset.h"
@@ -17,145 +22,28 @@
#include "JSystem/JKernel/JKRMemArchive.h"
#include "JSystem/J2DGraph/J2DTextBox.h"
#include "m_Do/m_Do_graphic.h"
-#include "dol2asm.h"
-
-//
-// Types:
-//
-
-struct dDemo_object_c {
- /* 80039088 */ void getActor(u8);
-};
-
-struct dDemo_c {
- static u8 m_object[4];
-};
-
-//
-// Forward References:
-//
-
-extern "C" void __ct__11daTit_HIO_cFv();
-extern "C" void CreateHeap__9daTitle_cFv();
-extern "C" void create__9daTitle_cFv();
-extern "C" void createHeapCallBack__9daTitle_cFP10fopAc_ac_c();
-extern "C" void Execute__9daTitle_cFv();
-extern "C" void KeyWaitAnm__9daTitle_cFv();
-extern "C" void loadWait_init__9daTitle_cFv();
-extern "C" void loadWait_proc__9daTitle_cFv();
-extern "C" void logoDispWaitInit__9daTitle_cFv();
-extern "C" void logoDispWait__9daTitle_cFv();
-extern "C" void logoDispAnmInit__9daTitle_cFv();
-extern "C" void logoDispAnm__9daTitle_cFv();
-extern "C" void keyWaitInit__9daTitle_cFv();
-extern "C" void keyWait__9daTitle_cFv();
-extern "C" void nextScene_init__9daTitle_cFv();
-extern "C" void nextScene_proc__9daTitle_cFv();
-extern "C" void fastLogoDispInit__9daTitle_cFv();
-extern "C" void fastLogoDisp__9daTitle_cFv();
-extern "C" void getDemoPrm__9daTitle_cFv();
-extern "C" void Draw__9daTitle_cFv();
-extern "C" void Delete__9daTitle_cFv();
-extern "C" static void daTitle_Draw__FP9daTitle_c();
-extern "C" static void daTitle_Execute__FP9daTitle_c();
-extern "C" static void daTitle_Delete__FP9daTitle_c();
-extern "C" static void daTitle_Create__FP10fopAc_ac_c();
-extern "C" void draw__15dDlst_daTitle_cFv();
-extern "C" void draw__12dDlst_base_cFv();
-extern "C" void __dt__11daTit_HIO_cFv();
-extern "C" void __sinit_d_a_title_cpp();
-extern "C" void __dt__15dDlst_daTitle_cFv();
-extern "C" void __dt__12J3DFrameCtrlFv();
-extern "C" extern char const* const d_a_title__stringBase0;
-
-//
-// External References:
-//
-
-extern "C" void play__14mDoExt_baseAnmFv();
-extern "C" void init__13mDoExt_bpkAnmFP16J3DMaterialTableP11J3DAnmColoriifss();
-extern "C" void entry__13mDoExt_bpkAnmFP16J3DMaterialTablef();
-extern "C" void init__13mDoExt_btkAnmFP16J3DMaterialTableP19J3DAnmTextureSRTKeyiifss();
-extern "C" void entry__13mDoExt_btkAnmFP16J3DMaterialTablef();
-extern "C" void init__13mDoExt_brkAnmFP16J3DMaterialTableP15J3DAnmTevRegKeyiifss();
-extern "C" void entry__13mDoExt_brkAnmFP16J3DMaterialTablef();
-extern "C" void init__13mDoExt_bckAnmFP15J3DAnmTransformiifssb();
-extern "C" void entry__13mDoExt_bckAnmFP12J3DModelDataf();
-extern "C" void mDoExt_modelUpdateDL__FP8J3DModel();
-extern "C" void mDoExt_getGameHeap__Fv();
-extern "C" void mDoExt_setCurrentHeap__FP7JKRHeap();
-extern "C" void mDoExt_getMesgFont__Fv();
-extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl();
-extern "C" void create__24mDoDvdThd_mountArchive_cFPCcUcP7JKRHeap();
-extern "C" void __ct__10fopAc_ac_cFv();
-extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl();
-extern "C" void fopOvlpM_IsPeek__Fv();
-extern "C" void fopScnM_SearchByID__FUi();
-extern "C" void fopScnM_ChangeReq__FP11scene_classssUs();
-extern "C" void fopMsgM_messageGet__FPcUl();
-extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc();
-extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc();
-extern "C" void getActor__14dDemo_object_cFUc();
-extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci();
-extern "C" void set__12dDlst_list_cFRPP12dDlst_base_cRPP12dDlst_base_cP12dDlst_base_c();
-extern "C" void __ct__13CPaneMgrAlphaFP9J2DScreenUxUcP10JKRExpHeap();
-extern "C" void alphaAnime__13CPaneMgrAlphaFsUcUcUc();
-extern "C" void alphaAnimeLoop__13CPaneMgrAlphaFsUcUcUc();
-extern "C" void
-getData__Q47JStudio3stb4data22TParse_TParagraph_dataCFPQ57JStudio3stb4data22TParse_TParagraph_data5TData();
-extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
-extern "C" void becomeCurrentHeap__7JKRHeapFv();
-extern "C" void destroy__7JKRHeapFv();
-extern "C" void* __nw__FUl();
-extern "C" void __dl__FPv();
-extern "C" void create__10JKRExpHeapFUlP7JKRHeapb();
-extern "C" void __ct__9J2DScreenFv();
-extern "C" void setPriority__9J2DScreenFPCcUlP10JKRArchive();
-extern "C" void draw__9J2DScreenFffPC14J2DGrafContext();
-extern "C" void getStringPtr__10J2DTextBoxCFv();
-extern "C" void setString__10J2DTextBoxFsPCce();
-extern "C" void init__12J3DFrameCtrlFs();
-extern "C" void __ptmf_scall();
-extern "C" void _savegpr_26();
-extern "C" void _savegpr_29();
-extern "C" void _restgpr_26();
-extern "C" void _restgpr_29();
-extern "C" u8 m_cpadInfo__8mDoCPd_c[256];
-extern "C" f32 mViewOffsetY__17dMenu_Collect3D_c[1 + 1 /* padding */];
-extern "C" u8 mFader__13mDoGph_gInf_c[4];
-extern "C" u8 mResetData__6mDoRst[4 + 4 /* padding */];
-extern "C" u8 mProcID__20dStage_roomControl_c[4];
-extern "C" u8 m_object__7dDemo_c[4];
-extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
-extern "C" void __register_global_object();
-
-//
-// Declarations:
-//
/* 80D67D8C-80D67DA8 000014 001C+00 4/4 0/0 0/0 .bss g_daTitHIO */
static daTit_HIO_c g_daTitHIO;
/* ############################################################################################## */
/* 80D67BD4-80D67BE0 000000 000C+00 2/2 0/0 0/0 .rodata @3772 */
-SECTION_RODATA static u8 const lit_3772[12] = {
+static u8 const lit_3772[12] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
-COMPILER_STRIP_GATE(0x80D67BD4, &lit_3772);
/* 80D67BE0-80D67BE8 00000C 0006+02 3/3 0/0 0/0 .rodata l_arcName */
-SECTION_RODATA static char const l_arcName[6] = "Title";
-COMPILER_STRIP_GATE(0x80D67BE0, &l_arcName);
+static char const l_arcName[6] = "Title";
/* 80D67C40-80D67C4C 000000 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */
-SECTION_DATA static u8 cNullVec__6Z2Calc[12] = {
+static u8 cNullVec__6Z2Calc[12] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* 80D67C4C-80D67C60 00000C 0004+10 0/0 0/0 0/0 .data @1787 */
#pragma push
#pragma force_active on
-SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = {
+static u32 lit_1787[1 + 4 /* padding */] = {
0x02000201,
/* padding */
0x40080000,
@@ -165,33 +53,11 @@ SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = {
};
#pragma pop
-SECTION_DATA static procFunc daTitleProc[6] = {
+static procFunc daTitleProc[6] = {
&daTitle_c::loadWait_proc, &daTitle_c::logoDispWait, &daTitle_c::logoDispAnm,
&daTitle_c::keyWait, &daTitle_c::nextScene_proc, &daTitle_c::fastLogoDisp,
};
-/* 80D67CF0-80D67D10 -00001 0020+00 1/0 0/0 0/0 .data l_daTitle_Method */
-SECTION_DATA static void* l_daTitle_Method[8] = {
- (void*)daTitle_Create__FP10fopAc_ac_c,
- (void*)daTitle_Delete__FP9daTitle_c,
- (void*)daTitle_Execute__FP9daTitle_c,
- (void*)NULL,
- (void*)daTitle_Draw__FP9daTitle_c,
- (void*)NULL,
- (void*)NULL,
- (void*)NULL,
-};
-
-/* 80D67D10-80D67D40 -00001 0030+00 0/0 0/0 1/0 .data g_profile_TITLE */
-SECTION_DATA extern void* g_profile_TITLE[12] = {
- (void*)0xFFFFFFFD, (void*)0x0007FFFD,
- (void*)0x02E10000, (void*)&g_fpcLf_Method,
- (void*)0x00000608, (void*)NULL,
- (void*)NULL, (void*)&g_fopAc_Method,
- (void*)0x000A0000, (void*)&l_daTitle_Method,
- (void*)0x00044000, (void*)0x000E0000,
-};
-
/* 80D66B0C-80D66B54 0000EC 0048+00 1/1 0/0 0/0 .text __ct__11daTit_HIO_cFv */
daTit_HIO_c::daTit_HIO_c() {
mPSScaleX = 1.0f;
@@ -435,6 +301,17 @@ void daTitle_c::fastLogoDisp() {
/* 80D676F4-80D67768 000CD4 0074+00 1/1 0/0 0/0 .text getDemoPrm__9daTitle_cFv */
int daTitle_c::getDemoPrm() {
// NONMATCHING
+ dDemo_actor_c* demoActor = dDemo_c::getActor(demoActorID);
+ dDemo_prm_c* prm;
+ if (demoActor != NULL && demoActor->checkEnable(1) &&
+ (prm = demoActor->getPrm()))
+ {
+ void* data = (void*)prm->getData();
+ JStudio::stb::TParseData_fixed<49> aTStack_30(data);
+ TValueIterator_raw<u8> iter = aTStack_30.begin();
+ return *iter & 0xff;
+ }
+ return -1;
}
/* 80D67768-80D6786C 000D48 0104+00 1/1 0/0 0/0 .text Draw__9daTitle_cFv */
@@ -477,23 +354,23 @@ int daTitle_c::Delete() {
}
/* 80D67948-80D67968 000F28 0020+00 1/0 0/0 0/0 .text daTitle_Draw__FP9daTitle_c */
-static void daTitle_Draw(daTitle_c* param_0) {
- // NONMATCHING
+static int daTitle_Draw(daTitle_c* i_this) {
+ return i_this->Draw();
}
/* 80D67968-80D67988 000F48 0020+00 1/0 0/0 0/0 .text daTitle_Execute__FP9daTitle_c */
-static void daTitle_Execute(daTitle_c* param_0) {
- // NONMATCHING
+static int daTitle_Execute(daTitle_c* i_this) {
+ return i_this->Execute();
}
/* 80D67988-80D679A8 000F68 0020+00 1/0 0/0 0/0 .text daTitle_Delete__FP9daTitle_c */
-static void daTitle_Delete(daTitle_c* param_0) {
- // NONMATCHING
+static int daTitle_Delete(daTitle_c* i_this) {
+ return i_this->Delete();
}
/* 80D679A8-80D679C8 000F88 0020+00 1/0 0/0 0/0 .text daTitle_Create__FP10fopAc_ac_c */
-static void daTitle_Create(fopAc_ac_c* param_0) {
- // NONMATCHING
+static int daTitle_Create(fopAc_ac_c* i_this) {
+ return static_cast<daTitle_c*>(i_this)->create();
}
/* 80D679C8-80D67A04 000FA8 003C+00 1/0 0/0 0/0 .text draw__15dDlst_daTitle_cFv */
@@ -502,5 +379,29 @@ void dDlst_daTitle_c::draw() {
Scr->draw(0.0f, 0.0f, ctx);
}
-/* 80D67A08-80D67A50 000FE8 0048+00 2/1 0/0 0/0 .text __dt__11daTit_HIO_cFv */
-daTit_HIO_c::~daTit_HIO_c() {} \ No newline at end of file
+/* 80D67CF0-80D67D10 -00001 0020+00 1/0 0/0 0/0 .data l_daTitle_Method */
+static actor_method_class l_daTitle_Method = {
+ (process_method_func)daTitle_Create,
+ (process_method_func)daTitle_Delete,
+ (process_method_func)daTitle_Execute,
+ (process_method_func)NULL,
+ (process_method_func)daTitle_Draw,
+};
+
+/* 80D67D10-80D67D40 -00001 0030+00 0/0 0/0 1/0 .data g_profile_TITLE */
+extern actor_process_profile_definition g_profile_TITLE = {
+ fpcLy_CURRENT_e, // mLayerID
+ 7, // mListID
+ fpcPi_CURRENT_e, // mListPrio
+ PROC_TITLE, // mProcName
+ &g_fpcLf_Method.mBase, // sub_method
+ sizeof(daTitle_c), // mSize
+ 0, // mSizeOther
+ 0, // mParameters
+ &g_fopAc_Method.base, // sub_method
+ 0xa, // mPriority
+ &l_daTitle_Method, // sub_method
+ 0x00044000, // mStatus
+ fopAc_ACTOR_e, // mActorType
+ fopAc_CULLBOX_CUSTOM_e, // cullType
+};