Files
tp/src/d/d_com_static.cpp
T
kipcode66 fc31053cb6 Improving compatibility with standard cpp compiler (#2920)
* Improving compatibility with standard cpp compiler

* Add __REGISTER macro for non mwcc compatibility

* Fix for PR comments

* fix missing define for revolution

* Simplifying cSAngle conversion
2025-12-06 21:08:05 -08:00

476 lines
11 KiB
C++

#include "d/d_com_static.h"
#include "d/d_demo.h"
#include "d/actor/d_a_arrow.h"
#include "d/actor/d_a_dshutter.h"
#include "d/actor/d_a_grass.h"
#include "d/actor/d_a_mirror.h"
#include "d/actor/d_a_movie_player.h"
#include "d/actor/d_a_set_bgobj.h"
#include "d/actor/d_a_ykgr.h"
#include "d/actor/d_a_obj_carry.h"
#include "d/actor/d_a_obj_movebox.h"
#include "d/actor/d_a_tag_magne.h"
#include "d/actor/d_a_tag_mist.h"
#include "d/actor/d_a_tag_stream.h"
#include "stdio.h"
void daSus_c::data_c::set(s8 i_roomNo, cXyz const& param_1, cXyz const& param_2, u8 param_3,
u8 param_4, u8 i_type) {
mRoomNo = i_roomNo;
field_0x8.set(param_1.x - param_2.x, param_1.y, param_1.z - param_2.z);
field_0x14.set(param_1.x + param_2.x, param_1.y + param_2.y, param_1.z + param_2.z);
field_0x2 = param_3;
field_0x1 = param_4 != 0;
field_0x3 = isSwitch() == false;
mType = i_type;
}
daSus_c::data_c* daSus_c::data_c::reset() {
mRoomNo = -1;
return mpNext;
}
u8 daSus_c::data_c::isSwitch() {
if (field_0x1 & 1) {
return dComIfGs_isSwitch(field_0x2, mRoomNo);
} else {
return dComIfGs_isSwitch(field_0x2, mRoomNo) == false;
}
}
bool daSus_c::data_c::check(cXyz const& i_pos) {
if (field_0x3 != 0) {
return false;
}
if ((field_0x8.x <= i_pos.x && i_pos.x <= field_0x14.x) &&
(field_0x8.y <= i_pos.y && i_pos.y <= field_0x14.y) &&
(field_0x8.z <= i_pos.z && i_pos.z <= field_0x14.z))
{
return true;
}
return false;
}
u8 daSus_c::data_c::check(fopAc_ac_c* i_actor) {
if (field_0x3) {
return 0x80;
}
u8 tmp = 0x80;
if (check(i_actor->home.pos)) {
tmp |= 1;
}
if (check(i_actor->current.pos)) {
tmp |= 2;
return tmp;
}
return tmp;
}
void daSus_c::data_c::execute() {
u8 sw = isSwitch();
if (sw != field_0x3) {
field_0x3 = sw;
}
}
void daSus_c::room_c::add(daSus_c::data_c* i_data) {
if (mpData == NULL) {
mpData = i_data;
i_data->setNext(NULL);
return;
}
if (i_data->getType() == 0) {
i_data->setNext(mpData);
mpData = i_data;
return;
}
daSus_c::data_c* data1 = mpData;
daSus_c::data_c* data2 = data1->getNext();
while (data2 != NULL) {
if (data1->getType() != 0)
break;
data1 = data2;
data2 = data2->getNext();
}
i_data->setNext(data1->getNext());
data1->setNext(i_data);
}
void daSus_c::room_c::reset() {
while (mpData != NULL && mpData->getType() == 0) {
mpData = mpData->reset();
}
}
daSus_c::data_c daSus_c::mData[0x20];
daSus_c::room_c daSus_c::mRoom[0x40];
/* 80450D88 0002+00 data_80450D88 m_count__9daArrow_c */
s16 daArrow_c::m_count;
/* 80450D8A 0002+00 data_80450D8A mSetTop__7daSus_c */
s16 daSus_c::mSetTop;
int daSus_c::newData(s8 i_roomNo, cXyz const& param_1, cXyz const& param_2, u8 param_3, u8 param_4,
u8 i_type) {
s16 setTop = mSetTop;
daSus_c::data_c* pData = ((daSus_c::data_c*)mData) + setTop;
for (s16 i = setTop; i < 32; pData++, i++) {
if (pData->isUsed()) {
pData->set(i_roomNo, param_1, param_2, param_3, param_4, i_type);
daSus_c::room_c* pRoom = ((daSus_c::room_c*)mRoom) + i_roomNo;
pRoom->add(pData);
mSetTop = (i + 1) % 32;
return 1;
}
}
pData = ((daSus_c::data_c*)mData);
for (s16 i = 0; i < setTop; pData++, i++) {
if (pData->isUsed()) {
pData->set(i_roomNo, param_1, param_2, param_3, param_4, i_type);
((daSus_c::room_c*)mRoom)[i_roomNo].add(pData);
mSetTop = (i + 1) % 32;
return 1;
}
}
return 0;
}
void daSus_c::reset() {
daSus_c::data_c* pData = (daSus_c::data_c*)mData;
for (int i = 0; i < 0x20; i++, pData++) {
pData->reset();
}
daSus_c::room_c* pRoom = (daSus_c::room_c*)mRoom;
for (int i = 0; i < 0x40; i++, pRoom++) {
pRoom->init();
}
}
bool daSus_c::check(s8 i_roomNo, cXyz const& i_pos) {
daSus_c::data_c* pData = (daSus_c::data_c*)mData;
for (s16 i = 0; i < 0x20; pData++, i++) {
if (!pData->isUsed() && i_roomNo == pData->getRoomNo() && pData->getType()) {
if (pData->check(i_pos)) {
return true;
}
}
}
return false;
}
void daSus_c::check(fopAc_ac_c* i_actor) {
if (fopAcM_GetGroup(i_actor) != 1 && fopAcM_GetGroup(i_actor) != 5) {
daSus_c::data_c* pData = (daSus_c::data_c*)mData;
u8 res = 0;
for (s16 i = 0; i < 0x20; pData++, i++) {
if (!pData->isUsed() && pData->getType() == 0) {
res |= pData->check(i_actor);
}
}
if ((res & 0x80) != 0) {
if ((res & 3) == 3) {
fopAcM_OnStatus(i_actor, 0x20000000);
} else {
fopAcM_OffStatus(i_actor, 0x20000000);
}
}
}
}
void daSus_c::execute() {
daSus_c::data_c* pData = (daSus_c::data_c*)mData;
for (s16 i = 0; i < 0x20; pData++, i++) {
if (!pData->isUsed()) {
pData->execute();
}
}
}
int daNpcMsg_setEvtNum(u8 iEvtNum) {
dComIfGs_setTmpReg(0xFDFF, iEvtNum);
return 1;
}
u8 daNpcKakashi_chkSwdTutorialStage() {
return strcmp(dComIfGp_getStartStageName(), "F_SP103") == 0 && dComIfG_play_c::getLayerNo(0) == 8;
}
void daNpcKakashi_setSwdTutorialStep(u8 iEvtNum) {
dComIfGs_setTmpReg(0xFF0F, iEvtNum);
}
u8 daNpcKakashi_getSwdTutorialStep() {
return dComIfGs_getTmpReg(0xFF0F) & 0xff;
}
bool daNpcKakashi_getSwdTutorialResult() {
/* dSv_event_tmp_flag_c::T_0004 - Ordon Village - sword tutorial - outcome */
return dComIfGs_isTmpBit(0x40);
}
void daNpcKakashi_setSwdTutorialResult(bool param_0) {
if (param_0) {
/* dSv_event_tmp_flag_c::T_0004 - Ordon Village - sword tutorial - outcome */
dComIfGs_onTmpBit(0x40);
} else {
/* dSv_event_tmp_flag_c::T_0004 - Ordon Village - sword tutorial - outcome */
dComIfGs_offTmpBit(0x40);
}
}
u8 daNpcKakashi_getSuccessCount() {
return dComIfGs_getTmpReg(0xFEFF) & 0xFF;
}
void daNpcKakashi_incSuccessCount() {
int tmpReg = dComIfGs_getTmpReg(0xFEFF);
tmpReg++;
dComIfGs_setTmpReg(0xFEFF, tmpReg);
}
void daNpcKakashi_clrSuccessCount() {
dComIfGs_setTmpReg(0xFEFF, 0);
}
/* 80450D8C 0001+00 data_80450D8C None */
bool daYkgr_c::m_flag;
/* 80450D8D 0001+00 data_80450D8D None */
bool daYkgr_c::m_alpha_flag;
/* 80450D8E 0002+00 data_80450D8E None */
u8 daYkgr_c::m_alpha;
f32 daYkgr_c::m_aim_rate;
dPath* daYkgr_c::m_path;
JPABaseEmitter* daYkgr_c::m_emitter;
const char* daSetBgObj_c::getArcName(fopAc_ac_c* i_this) {
static char arcName[8];
sprintf(arcName, "@bg%04x", (u16)fopAcM_GetParam(i_this));
return arcName;
}
s16 const daObjMovebox::Act_c::M_dir_base[4] = {
0x0000,
0x4000,
-0x8000,
-0x4000,
};
f32 const daDsh_c::OPEN_SIZE = 270.1f;
f32 const daDsh_c::OPEN_ACCEL = 10.0f;
f32 const daDsh_c::OPEN_SPEED = -40.0f;
f32 const daDsh_c::OPEN_BOUND_SPEED = -30.0f;
f32 const daDsh_c::OPEN_BOUND_RATIO = -0.4f;
f32 const daDsh_c::CLOSE_ACCEL = 10.0f;
f32 const daDsh_c::CLOSE_SPEED = 40.0f;
f32 const daDsh_c::CLOSE_BOUND_SPEED = 30.0f;
f32 const daDsh_c::CLOSE_BOUND_RATIO = -0.4f;
int daTagStream_c::checkArea(cXyz const* param_0) {
cXyz relativePos;
fpoAcM_relativePos(this, param_0, &relativePos);
if (relativePos.y >= 0.0f && relativePos.y <= scale.y && fabsf(relativePos.x) <= scale.x &&
fabsf(relativePos.z) <= scale.z)
{
return 1;
}
return 0;
}
daMirror_c::entryModelFunc daMirror_c::m_entryModel = NULL;
daTagStream_c* daTagStream_c::m_top;
daMirror_c* daMirror_c::m_myObj;
int daMirror_c::entry(J3DModel* param_0) {
if (m_myObj == NULL) {
return 0;
}
return (m_myObj->*(daMirror_c::m_entryModel))(param_0);
}
bool daMirror_c::remove() {
if (m_myObj == NULL) {
return false;
}
fopAcM_delete(m_myObj);
return true;
}
dGrass_packet_c::deleteFunc dGrass_packet_c::m_deleteRoom = NULL;
daGrass_c* daGrass_c::m_myObj;
dGrass_packet_c* daGrass_c::m_grass;
void daGrass_c::deleteRoomGrass(int param_0) {
if (m_grass != NULL) {
dGrass_packet_c::deleteFunc delete_func = dGrass_packet_c::m_deleteRoom;
(m_grass->*(delete_func))(param_0);
}
}
dFlower_packet_c::deleteFunc dFlower_packet_c::m_deleteRoom = NULL;
dFlower_packet_c* daGrass_c::m_flower;
void daGrass_c::deleteRoomFlower(int param_0) {
if (m_flower != NULL) {
dFlower_packet_c::deleteFunc delete_func = dFlower_packet_c::m_deleteRoom;
(m_flower->*(delete_func))(param_0);
}
}
daMP_c* daMP_c::m_myObj;
u32 daMP_c::daMP_c_Get_MovieRestFrame() {
return m_myObj->mpGetMovieRestFrame();
}
void daMP_c::daMP_c_Set_PercentMovieVolume(f32 i_volume) {
m_myObj->mpSetPercentMovieVol(i_volume);
}
int daMP_c::daMP_c_THPPlayerPlay() {
if (m_myObj == NULL) {
dDemo_c::onStatus(1);
return 0;
} else {
dDemo_c::offStatus(1);
return m_myObj->mpTHPPlay();
}
}
void daMP_c::daMP_c_THPPlayerPause() {
m_myObj->mpTHPPause();
}
daTagMagne_c* daTagMagne_c::mTagMagne;
int daTagMagne_c::checkMagnetCode(cBgS_PolyInfo& poly) {
if (mTagMagne == NULL) {
return 0;
}
int magCode = dComIfG_Bgsp().GetMagnetCode(poly);
if ((magCode == 1 && mTagMagne->checkMagneA()) || (magCode == 2 && mTagMagne->checkMagneB()) ||
(magCode == 3 && mTagMagne->checkMagneC()))
{
return 1;
}
return 0;
}
int daTagMagne_c::checkMagneA() {
if (mSwNo1 == 0xFF || fopAcM_isSwitch(this, mSwNo1)) {
return 1;
}
return 0;
}
int daTagMagne_c::checkMagneB() {
if (mSwNo2 == 0xFF || fopAcM_isSwitch(this, mSwNo2)) {
return 1;
}
return 0;
}
int daTagMagne_c::checkMagneC() {
if (mSwNo3 == 0xFF || fopAcM_isSwitch(this, mSwNo3)) {
return 1;
}
return 0;
}
/* 80450DC0 0001+00 data_80450DC0 None */
u8 daTagMist_c::mPlayerNo;
/* 80450DC1 0003+00 data_80450DC1 None */
bool daObjCarry_c::mSaveFlag;
u8 daTagMist_c::getPlayerNo() {
return mPlayerNo;
}
void daObjCarry_c::clrSaveFlag() {
mSaveFlag = false;
}
void daObjCarry_c::setSaveFlag() {
mSaveFlag = true;
}
bool daObjCarry_c::chkSaveFlag() {
return mSaveFlag == true;
}
cXyz daObjCarry_c::mPos[5];
const cXyz& daObjCarry_c::getPos(int param_0) {
return mPos[param_0];
}
void daObjCarry_c::savePos(int param_0, cXyz param_1) {
mPos[param_0].x = param_1.x;
mPos[param_0].y = param_1.y;
mPos[param_0].z = param_1.z;
}
u8 daObjCarry_c::mSttsFlag[5];
void daObjCarry_c::onSttsFlag(int idx, u8 flag) {
mSttsFlag[idx] |= flag;
}
void daObjCarry_c::offSttsFlag(int idx, u8 flag) {
mSttsFlag[idx] &= ~flag;
}
u8 daObjCarry_c::chkSttsFlag(int idx, u8 flag) {
return (u8)(mSttsFlag[idx] & flag) ? 1 : 0;
}
s8 daObjCarry_c::mRoomNo[5];
void daObjCarry_c::setRoomNo(int idx, s8 roomNo) {
mRoomNo[idx] = roomNo;
}
s8 daObjCarry_c::getRoomNo(int idx) {
return mRoomNo[idx];
}