mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-08-16 12:24:45 -04:00
work on daalink, fop actor, mDo machine, msg_scrn, + various (#201)
* work on fop actor / actor mng, daalink, d_a_obj_item * d_a_title mostly decompiled * daalink / d_event / JMessage / dmsg_out_font work * msg_scrn_base / msg_scrn_boss * some work on mDo machine, d_menu_save, d_tresure, and various * remove asm * progress
This commit is contained in:
+167
-79
@@ -12,12 +12,8 @@
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct mDoMtx_stack_c {
|
||||
static u8 now[48];
|
||||
};
|
||||
|
||||
struct dMapInfo_c {
|
||||
/* 8003F40C */ void calcFloorNo(f32, bool, int);
|
||||
/* 8003F40C */ static s8 calcFloorNo(f32, bool, int);
|
||||
};
|
||||
|
||||
//
|
||||
@@ -69,6 +65,10 @@ extern "C" extern bool data_80450680;
|
||||
// Declarations:
|
||||
//
|
||||
|
||||
inline dStage_stageDt_c* dComIfGp_getStage() {
|
||||
return &g_dComIfG_gameInfo.play.getStage();
|
||||
}
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 80450F98-80450F9C 000498 0004+00 2/2 0/0 0/0 .sbss mTypeGroupData__7dTres_c */
|
||||
dTres_c::typeGroupData_c* dTres_c::mTypeGroupData;
|
||||
@@ -84,14 +84,11 @@ asm int dTres_c::createWork() {
|
||||
#pragma pop
|
||||
|
||||
/* 8009BC18-8009BC60 096558 0048+00 0/0 1/1 0/0 .text create__7dTres_cFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void dTres_c::create() {
|
||||
nofralloc
|
||||
#include "asm/d/d_tresure/create__7dTres_cFv.s"
|
||||
void dTres_c::create() {
|
||||
if (dStage_stagInfo_GetSTType(dComIfGp_getStage()->getStagInfo()) != 3) {
|
||||
reset();
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 8009BC60-8009BC6C 0965A0 000C+00 0/0 1/1 0/0 .text remove__7dTres_cFv */
|
||||
void dTres_c::remove() {
|
||||
@@ -106,17 +103,57 @@ dTres_c::list_class dTres_c::mTypeGroupListAll[17];
|
||||
u16 dTres_c::mNum;
|
||||
|
||||
/* 8009BC6C-8009BCB4 0965AC 0048+00 2/2 0/0 0/0 .text reset__7dTres_cFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void dTres_c::reset() {
|
||||
nofralloc
|
||||
#include "asm/d/d_tresure/reset__7dTres_cFv.s"
|
||||
void dTres_c::reset() {
|
||||
if (data_80450680) {
|
||||
mNum = 0;
|
||||
data_80450680 = false;
|
||||
|
||||
for (int i = 0; i < 17; i++) {
|
||||
mTypeGroupListAll[i].field_0x0 = NULL;
|
||||
mTypeGroupListAll[i].field_0x4 = NULL;
|
||||
mTypeGroupListAll[i].mNumber = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 8009BCB4-8009BE28 0965F4 0174+00 0/0 1/1 0/0 .text addData__7dTres_cFPQ27dTres_c10list_classSc
|
||||
*/
|
||||
#ifdef NONMATCHING
|
||||
void dTres_c::addData(dTres_c::list_class* p_list, s8 roomNo) {
|
||||
if (dStage_stagInfo_GetSTType(dComIfGp_getStage()->getStagInfo()) != 3) {
|
||||
reset();
|
||||
|
||||
typeGroupData_c* listData = p_list->field_0x4;
|
||||
typeGroupData_c* groupData = &mTypeGroupData[mNum];
|
||||
for (int i = 0; i < (int)p_list->field_0x0; i++) {
|
||||
groupData->mData = listData->mData;
|
||||
groupData->mData.mRoomNo = roomNo;
|
||||
groupData->mData.mStatus = 0;
|
||||
|
||||
u8 typeGroupNo = getTypeToTypeGroupNo(groupData->mData.mType);
|
||||
groupData->setNextDataPointer(NULL);
|
||||
groupData->setTypeGroupNo(typeGroupNo);
|
||||
|
||||
list_class* typeGroupList = mTypeGroupListAll + typeGroupNo;
|
||||
if (typeGroupList->field_0x0 == NULL) {
|
||||
typeGroupList->field_0x0 = groupData;
|
||||
}
|
||||
|
||||
if (mTypeGroupListAll[i].field_0x4 != NULL) {
|
||||
mTypeGroupListAll[i].field_0x4->setNextDataPointer(groupData);
|
||||
}
|
||||
mTypeGroupListAll[i].field_0x4 = groupData;
|
||||
mTypeGroupListAll[i].mNumber++;
|
||||
|
||||
if ((s32)groupData->mData.mType == 0xFF) {
|
||||
checkTreasureBox(&groupData->mData);
|
||||
}
|
||||
|
||||
mNum++;
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -125,6 +162,7 @@ asm void dTres_c::addData(dTres_c::list_class* param_0, s8 param_1) {
|
||||
#include "asm/d/d_tresure/addData__7dTres_cFPQ27dTres_c10list_classSc.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 80452BE8-80452BEC 0011E8 0004+00 1/1 0/0 0/0 .sdata2 @3839 */
|
||||
@@ -164,16 +202,38 @@ asm void dTres_c::checkTreasureBox(dTres_c::data_s* param_0) {
|
||||
#pragma pop
|
||||
|
||||
/* 8009C168-8009C1F0 096AA8 0088+00 0/0 0/0 3/3 .text onStatus__7dTres_cFUcii */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void dTres_c::onStatus(u8 param_0, int param_1, int param_2) {
|
||||
nofralloc
|
||||
#include "asm/d/d_tresure/onStatus__7dTres_cFUcii.s"
|
||||
void dTres_c::onStatus(u8 listIdx, int param_1, int flag) {
|
||||
typeGroupData_c* groupData = getFirstData(listIdx);
|
||||
int typeGroupNo = getTypeGroupNumber(listIdx);
|
||||
|
||||
for (int i = 0; i < typeGroupNo; i++) {
|
||||
if (param_1 == groupData->getNo()) {
|
||||
u8 status = groupData->getStatus();
|
||||
|
||||
cLib_onBit(status, flag);
|
||||
groupData->setStatus(status);
|
||||
}
|
||||
groupData = getNextData(groupData);
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 8009C1F0-8009C27C 096B30 008C+00 0/0 0/0 3/3 .text offStatus__7dTres_cFUcii */
|
||||
#ifdef NONMATCHING
|
||||
void dTres_c::offStatus(u8 listIdx, int param_1, int flag) {
|
||||
typeGroupData_c* groupData = getFirstData(listIdx);
|
||||
int typeGroupNo = getTypeGroupNumber(listIdx);
|
||||
|
||||
for (int i = 0; i < typeGroupNo; i++) {
|
||||
if (param_1 == groupData->getNo()) {
|
||||
u8 status = groupData->getStatus();
|
||||
|
||||
cLib_offBit(status, flag);
|
||||
groupData->setStatus(status);
|
||||
}
|
||||
groupData = getNextData(groupData);
|
||||
}
|
||||
}
|
||||
#else
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
@@ -182,87 +242,115 @@ asm void dTres_c::offStatus(u8 param_0, int param_1, int param_2) {
|
||||
#include "asm/d/d_tresure/offStatus__7dTres_cFUcii.s"
|
||||
}
|
||||
#pragma pop
|
||||
#endif
|
||||
|
||||
/* 8009C27C-8009C360 096BBC 00E4+00 0/0 1/1 0/0 .text getBossIconFloorNo__7dTres_cFPi */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void dTres_c::getBossIconFloorNo(int* param_0) {
|
||||
nofralloc
|
||||
#include "asm/d/d_tresure/getBossIconFloorNo__7dTres_cFPi.s"
|
||||
int dTres_c::getBossIconFloorNo(int* o_floorNo) {
|
||||
int ret;
|
||||
|
||||
if (o_floorNo == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
*o_floorNo = 0;
|
||||
typeGroupData_c* groupData = getFirstData(3);
|
||||
|
||||
if (groupData != NULL && dComIfGs_isDungeonItemCompass()) {
|
||||
if ((groupData->getSwBit() == 0xFF ||
|
||||
(groupData->getSwBit() != 0xFF &&
|
||||
dComIfGs_isSwitch(groupData->getSwBit(), groupData->getRoomNo()))) &&
|
||||
!dComIfGs_isStageBossEnemy()) {
|
||||
*o_floorNo =
|
||||
dMapInfo_c::calcFloorNo(groupData->getPos()->y, true, groupData->getRoomNo());
|
||||
ret = 1;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 8009C360-8009C39C 096CA0 003C+00 4/4 4/4 0/0 .text getFirstData__7dTres_cFUc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void dTres_c::getFirstData(u8 param_0) {
|
||||
nofralloc
|
||||
#include "asm/d/d_tresure/getFirstData__7dTres_cFUc.s"
|
||||
dTres_c::typeGroupData_c* dTres_c::getFirstData(u8 listIdx) {
|
||||
if (mTypeGroupListAll + listIdx == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if ((s32)mTypeGroupListAll[listIdx].mNumber == 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return mTypeGroupListAll[listIdx].field_0x0;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 8009C39C-8009C3B4 096CDC 0018+00 2/2 3/3 0/0 .text
|
||||
* getNextData__7dTres_cFPQ27dTres_c15typeGroupData_c */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void dTres_c::getNextData(dTres_c::typeGroupData_c* param_0) {
|
||||
nofralloc
|
||||
#include "asm/d/d_tresure/getNextData__7dTres_cFPQ27dTres_c15typeGroupData_c.s"
|
||||
dTres_c::typeGroupData_c* dTres_c::getNextData(dTres_c::typeGroupData_c* p_data) {
|
||||
if (p_data == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return p_data->getNextDataPointer();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 8009C3B4-8009C3CC 096CF4 0018+00 0/0 1/1 0/0 .text
|
||||
* getNextData__7dTres_cFPCQ27dTres_c15typeGroupData_c */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void dTres_c::getNextData(dTres_c::typeGroupData_c const* param_0) {
|
||||
nofralloc
|
||||
#include "asm/d/d_tresure/getNextData__7dTres_cFPCQ27dTres_c15typeGroupData_c.s"
|
||||
dTres_c::typeGroupData_c* dTres_c::getNextData(dTres_c::typeGroupData_c const* p_data) {
|
||||
if (p_data == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return p_data->getNextDataPointer();
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 8009C3CC-8009C49C 096D0C 00D0+00 0/0 0/0 14/14 .text setPosition__7dTres_cFiUcPC3Veci
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void dTres_c::setPosition(int param_0, u8 param_1, Vec const* param_2, int param_3) {
|
||||
nofralloc
|
||||
#include "asm/d/d_tresure/setPosition__7dTres_cFiUcPC3Veci.s"
|
||||
void dTres_c::setPosition(int dataNo, u8 listIdx, Vec const* i_pos, int i_roomNo) {
|
||||
typeGroupData_c* groupData = getFirstData(listIdx);
|
||||
|
||||
for (int i = getTypeGroupNumber(listIdx); i > 0; i--) {
|
||||
if (dataNo == groupData->getNo()) {
|
||||
Vec pos;
|
||||
pos.x = i_pos->x;
|
||||
pos.y = i_pos->y;
|
||||
pos.z = i_pos->z;
|
||||
|
||||
if (i_roomNo >= 0) {
|
||||
groupData->setRoomNo(i_roomNo);
|
||||
}
|
||||
dMapInfo_n::correctionOriginPos(groupData->getRoomNo(), &pos);
|
||||
groupData->setPos(pos);
|
||||
return;
|
||||
}
|
||||
groupData = groupData->getNextDataPointer();
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 8037B0D8-8037B100 007738 0022+06 2/2 0/0 0/0 .rodata typeToTypeGroup__7dTres_c */
|
||||
SECTION_RODATA u8 const dTres_c::typeToTypeGroup[34] = {
|
||||
0xFF, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05,
|
||||
0x05, 0x06, 0x06, 0x07, 0x07, 0x08, 0x80, 0x09, 0x81, 0x0A, 0x82, 0x0B,
|
||||
0x83, 0x0C, 0x84, 0x0D, 0x85, 0x0E, 0x87, 0x0F, 0x88, 0x10,
|
||||
SECTION_RODATA u8 const dTres_c::typeToTypeGroup[17][2] = {
|
||||
{0xFF, 0x00}, {0x00, 0x01}, {0x01, 0x02}, {0x02, 0x03}, {0x03, 0x04}, {0x04, 0x05},
|
||||
{0x05, 0x06}, {0x06, 0x07}, {0x07, 0x08}, {0x80, 0x09}, {0x81, 0x0A}, {0x82, 0x0B},
|
||||
{0x83, 0x0C}, {0x84, 0x0D}, {0x85, 0x0E}, {0x87, 0x0F}, {0x88, 0x10},
|
||||
};
|
||||
COMPILER_STRIP_GATE(0x8037B0D8, &dTres_c::typeToTypeGroup);
|
||||
|
||||
/* 8009C49C-8009C4B0 096DDC 0014+00 0/0 1/1 0/0 .text getTypeGroupNoToType__7dTres_cFUc
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void dTres_c::getTypeGroupNoToType(u8 param_0) {
|
||||
nofralloc
|
||||
#include "asm/d/d_tresure/getTypeGroupNoToType__7dTres_cFUc.s"
|
||||
int dTres_c::getTypeGroupNoToType(u8 i_typeGroupNo) {
|
||||
return typeToTypeGroup[i_typeGroupNo][0];
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 8009C4B0-8009C4FC 096DF0 004C+00 1/1 3/3 0/0 .text getTypeToTypeGroupNo__7dTres_cFUc
|
||||
*/
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm u8 dTres_c::getTypeToTypeGroupNo(u8 param_0) {
|
||||
nofralloc
|
||||
#include "asm/d/d_tresure/getTypeToTypeGroupNo__7dTres_cFUc.s"
|
||||
int dTres_c::getTypeToTypeGroupNo(u8 i_type) {
|
||||
u8 groupNo = 17;
|
||||
for (int i = 0; i < 17; i++) {
|
||||
if (i_type == typeToTypeGroup[i][0]) {
|
||||
groupNo = typeToTypeGroup[i][1];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return groupNo;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
Reference in New Issue
Block a user