d_t_touch OK (#54)

* d_t_touch OK

* Make inlines
This commit is contained in:
robojumper
2024-10-06 21:42:07 +02:00
committed by GitHub
parent 8376edcc72
commit 25d80826c7
8 changed files with 170 additions and 50 deletions
@@ -17,3 +17,6 @@ REL/global_destructor_chain.c:
REL/d/t/d_t_touch.cpp:
.text start:0x000000F0 end:0x00000BB8
.ctors start:0x00000000 end:0x00000004
.rodata start:0x00000000 end:0x00000008
.data start:0x00000000 end:0x00000200
.bss start:0x00000008 end:0x00000048
+46 -46
View File
@@ -3,53 +3,53 @@ _epilog = .text:0x00000030; // type:function size:0x2C scope:global
_unresolved = .text:0x00000060; // type:function size:0x4 scope:global
__register_global_object = .text:0x00000070; // type:function size:0x1C scope:global
__destroy_global_chain = .text:0x00000090; // type:function size:0x54 scope:global
TgTouchTag__ctor = .text:0x000000F0; // type:function size:0xAC
fn_565_1A0 = .text:0x000001A0; // type:function size:0x58
fn_565_200 = .text:0x00000200; // type:function size:0x58
fn_565_260 = .text:0x00000260; // type:function size:0x6C
fn_565_2D0 = .text:0x000002D0; // type:function size:0xA0
fn_565_370 = .text:0x00000370; // type:function size:0xA4
TgTouchTag__init = .text:0x00000420; // type:function size:0xA0
fn_565_4C0 = .text:0x000004C0; // type:function size:0x10
fn_565_4D0 = .text:0x000004D0; // type:function size:0x8
TgTouchTag__update = .text:0x000004E0; // type:function size:0xA0
fn_565_580 = .text:0x00000580; // type:function size:0x10
fn_565_590 = .text:0x00000590; // type:function size:0x8
TgTouchTag__stateWaitEnter = .text:0x000005A0; // type:function size:0xC
TgTouchTag__stateWaitIn = .text:0x000005B0; // type:function size:0x138
TgTouchTag__decrement = .text:0x000006F0; // type:function size:0x1C
fn_565_710 = .text:0x00000710; // type:function size:0x4
TgTouchTag__dtor = .text:0x00000720; // type:function size:0xC8
fn_565_7F0 = .text:0x000007F0; // type:function size:0x10
fn_565_800 = .text:0x00000800; // type:function size:0x60
fn_565_860 = .text:0x00000860; // type:function size:0xC
fn_565_870 = .text:0x00000870; // type:function size:0x1C
fn_565_890 = .text:0x00000890; // type:function size:0x1C
fn_565_8B0 = .text:0x000008B0; // type:function size:0x1C
fn_565_8D0 = .text:0x000008D0; // type:function size:0x10
fn_565_8E0 = .text:0x000008E0; // type:function size:0x10
fn_565_8F0 = .text:0x000008F0; // type:function size:0x10
fn_565_900 = .text:0x00000900; // type:function size:0x10
fn_565_910 = .text:0x00000910; // type:function size:0x10
fn_565_920 = .text:0x00000920; // type:function size:0x10
fn_565_930 = .text:0x00000930; // type:function size:0x30
fn_565_960 = .text:0x00000960; // type:function size:0x30
fn_565_990 = .text:0x00000990; // type:function size:0x30
fn_565_9C0 = .text:0x000009C0; // type:function size:0x10C
fn_565_AD0 = .text:0x00000AD0; // type:function size:0x58
fn_565_B30 = .text:0x00000B30; // type:function size:0x88
dTgTouchTag_classInit__Fv = .text:0x000000F0; // type:function size:0xAC
__dt__5dTg_cFv = .text:0x000001A0; // type:function size:0x58
__dt__24sFState_c<11dTgTouchTag>Fv = .text:0x00000200; // type:function size:0x58
__dt__27sFStateFct_c<11dTgTouchTag>Fv = .text:0x00000260; // type:function size:0x6C
__dt__80sStateMgr_c<11dTgTouchTag,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000002D0; // type:function size:0xA0
__dt__50sFStateMgr_c<11dTgTouchTag,20sStateMethodUsr_FI_c>Fv = .text:0x00000370; // type:function size:0xA4
create__11dTgTouchTagFv = .text:0x00000420; // type:function size:0xA0
changeState__80sStateMgr_c<11dTgTouchTag,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x000004C0; // type:function size:0x10
doDelete__11dTgTouchTagFv = .text:0x000004D0; // type:function size:0x8
actorExecute__11dTgTouchTagFv = .text:0x000004E0; // type:function size:0xA0
executeState__80sStateMgr_c<11dTgTouchTag,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000580; // type:function size:0x10
draw__11dTgTouchTagFv = .text:0x00000590; // type:function size:0x8
initializeState_Wait__11dTgTouchTagFv = .text:0x000005A0; // type:function size:0xC
executeState_Wait__11dTgTouchTagFv = .text:0x000005B0; // type:function size:0x138
calcTimer<Us>__2cMFPUs_Us = .text:0x000006F0; // type:function size:0x1C
finalizeState_Wait__11dTgTouchTagFv = .text:0x00000710; // type:function size:0x4
__dt__11dTgTouchTagFv = .text:0x00000720; // type:function size:0xC8
getStateID__80sStateMgr_c<11dTgTouchTag,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x000007F0; // type:function size:0x10
build__27sFStateFct_c<11dTgTouchTag>FRC12sStateIDIf_c = .text:0x00000800; // type:function size:0x60
dispose__27sFStateFct_c<11dTgTouchTag>FRP10sStateIf_c = .text:0x00000860; // type:function size:0xC
initialize__24sFState_c<11dTgTouchTag>Fv = .text:0x00000870; // type:function size:0x1C
execute__24sFState_c<11dTgTouchTag>Fv = .text:0x00000890; // type:function size:0x1C
finalize__24sFState_c<11dTgTouchTag>Fv = .text:0x000008B0; // type:function size:0x1C
initializeState__80sStateMgr_c<11dTgTouchTag,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000008D0; // type:function size:0x10
finalizeState__80sStateMgr_c<11dTgTouchTag,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000008E0; // type:function size:0x10
refreshState__80sStateMgr_c<11dTgTouchTag,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000008F0; // type:function size:0x10
getState__80sStateMgr_c<11dTgTouchTag,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000900; // type:function size:0x10
getNewStateID__80sStateMgr_c<11dTgTouchTag,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000910; // type:function size:0x10
getOldStateID__80sStateMgr_c<11dTgTouchTag,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000920; // type:function size:0x10
finalizeState__26sFStateID_c<11dTgTouchTag>CFR11dTgTouchTag = .text:0x00000930; // type:function size:0x30
executeState__26sFStateID_c<11dTgTouchTag>CFR11dTgTouchTag = .text:0x00000960; // type:function size:0x30
initializeState__26sFStateID_c<11dTgTouchTag>CFR11dTgTouchTag = .text:0x00000990; // type:function size:0x30
__sinit_\d_t_touch_cpp = .text:0x000009C0; // type:function size:0x10C scope:local
__dt__26sFStateID_c<11dTgTouchTag>Fv = .text:0x00000AD0; // type:function size:0x58
isSameName__26sFStateID_c<11dTgTouchTag>CFPCc = .text:0x00000B30; // type:function size:0x88
_ctors = .ctors:0x00000000; // type:label scope:global
_dtors = .dtors:0x00000000; // type:label scope:global
__destroy_global_chain_reference = .dtors:0x00000000; // type:object size:0x4 scope:global
lbl_565_rodata_0 = .rodata:0x00000000; // type:object size:0x4
lbl_565_rodata_4 = .rodata:0x00000004; // type:object size:0x4 data:float
lbl_565_data_0 = .data:0x00000000; // type:object size:0x10 data:4byte
lbl_565_data_10 = .data:0x00000010; // type:object size:0x78
lbl_565_data_88 = .data:0x00000088; // type:object size:0x30
lbl_565_data_B8 = .data:0x000000B8; // type:object size:0x30
lbl_565_data_E8 = .data:0x000000E8; // type:object size:0x18
lbl_565_data_100 = .data:0x00000100; // type:object size:0xCC
lbl_565_data_1CC = .data:0x000001CC; // type:object size:0x34
ACTIVATORS = .rodata:0x00000000; // type:object size:0x4 scope:local
lbl_565_rodata_4 = .rodata:0x00000004; // type:object size:0x4 scope:local data:float
g_profile_TOUCH_TAG = .data:0x00000000; // type:object size:0x10 data:4byte
__vt__11dTgTouchTag = .data:0x00000010; // type:object size:0x74
__vt__50sFStateMgr_c<11dTgTouchTag,20sStateMethodUsr_FI_c> = .data:0x00000088; // type:object size:0x30
__vt__80sStateMgr_c<11dTgTouchTag,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x000000B8; // type:object size:0x30
__vt__27sFStateFct_c<11dTgTouchTag> = .data:0x000000E8; // type:object size:0x14
__vt__24sFState_c<11dTgTouchTag> = .data:0x00000100; // type:object size:0x18
lbl_565_data_1CC = .data:0x000001CC; // type:object size:0x34 scope:local
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
lbl_565_bss_8 = .bss:0x00000008; // type:object size:0x10
lbl_565_bss_18 = .bss:0x00000018; // type:object size:0x30 data:4byte
lbl_565_bss_8 = .bss:0x00000008; // type:object size:0x10 scope:local
StateID_Wait__11dTgTouchTag = .bss:0x00000018; // type:object size:0x30 data:4byte
+2 -2
View File
@@ -2899,8 +2899,8 @@ fn_80066E00 = .text:0x80066E00; // type:function size:0x44
fn_80066E50 = .text:0x80066E50; // type:function size:0x108
fn_80066F60 = .text:0x80066F60; // type:function size:0x50
lzSafeDecompress = .text:0x80066FB0; // type:function size:0x64
matrixCreateFromPosRotYScale = .text:0x80067020; // type:function size:0x138
checkIfVec3fInMatrix = .text:0x80067160; // type:function size:0x88
matrixCreateFromPosRotYScale__FR6mMtx_cRC7mVec3_c4mAngRC7mVec3_cP6mMtx_cf = .text:0x80067020; // type:function size:0x138
checkIfVec3fInMatrix__FRC6mMtx_cRC7mVec3_c = .text:0x80067160; // type:function size:0x88
fn_800671F0 = .text:0x800671F0; // type:function size:0x84
fn_80067280 = .text:0x80067280; // type:function size:0x4
fn_80067290 = .text:0x80067290; // type:function size:0xA8
+1 -1
View File
@@ -1463,7 +1463,7 @@ config.libs = [
Rel(Matching, "d_t_timer", "REL/d/t/d_t_timer.cpp"),
Rel(Matching, "d_t_time_area_check", "REL/d/t/d_t_time_area_check.cpp"),
Rel(NonMatching, "d_t_time_door_beam", "REL/d/t/d_t_time_door_beam.cpp"),
Rel(NonMatching, "d_t_touch", "REL/d/t/d_t_touch.cpp"),
Rel(Matching, "d_t_touch", "REL/d/t/d_t_touch.cpp"),
Rel(NonMatching, "d_t_tumble_weed", "REL/d/t/d_t_tumble_weed.cpp"),
]
-1
View File
@@ -2,7 +2,6 @@
#define D_T_MOLE_PROHIBIT_H
#include <d/tg/d_tg.h>
#include <m/m3d/m_smdl.h>
#include <s/s_State.hpp>
#include <s/s_StateMgr.hpp>
+41
View File
@@ -0,0 +1,41 @@
#ifndef D_T_TOUCH_H
#define D_T_TOUCH_H
#include <d/tg/d_tg.h>
#include <m/m_mtx.h>
#include <s/s_State.hpp>
#include <s/s_StateMgr.hpp>
class dTgTouchTag : public dTg_c {
public:
dTgTouchTag() : mStateMgr(*this, sStateID::null) {}
virtual ~dTgTouchTag() {}
virtual int create() override;
virtual int actorExecute() override;
virtual int draw() override;
virtual int doDelete() override;
STATE_FUNC_DECLARE(dTgTouchTag, Wait);
private:
u8 getActivatorIndex() {
return params & 0xF;
}
u8 getZoneFlag() {
return params >> 0x4;
}
u8 getChkFlag() {
return params >> 0xC;
}
STATE_MGR_DECLARE(dTgTouchTag);
mMtx_c mAreaOfEffect;
u16 mFlagTimer;
u8 mActivatorIndex;
u8 mZoneFlag;
u8 mChkFlag;
};
#endif
+11
View File
@@ -0,0 +1,11 @@
#ifndef D_AREA_MATH_H
#define D_AREA_MATH_H
#include <m/m_angle.h>
#include <m/m_mtx.h>
#include <m/m_vec.h>
void matrixCreateFromPosRotYScale(mMtx_c &, const mVec3_c &, const mAng, const mVec3_c &, mMtx_c *, f32);
bool checkIfVec3fInMatrix(const mMtx_c &, const mVec3_c &);
#endif
+66
View File
@@ -0,0 +1,66 @@
#include <c/c_math.h>
#include <d/tg/d_t_touch.h>
#include <toBeSorted/area_math.h>
#include <toBeSorted/sceneflag_manager.h>
SPECIAL_ACTOR_PROFILE(TOUCH_TAG, dTgTouchTag, fProfile::TOUCH_TAG, 0x028E, 0, 0);
STATE_DEFINE(dTgTouchTag, Wait);
const static u16 ACTIVATORS[] = {
fProfile::BOMB,
fProfile::BOMB,
};
int dTgTouchTag::create() {
mActivatorIndex = !(getActivatorIndex() == 0xF) ? getActivatorIndex() : 0;
mZoneFlag = getZoneFlag();
mChkFlag = getChkFlag();
matrixCreateFromPosRotYScale(mAreaOfEffect, position, rotation.y, scale, nullptr, 0.0f);
mStateMgr.changeState(StateID_Wait);
return SUCCEEDED;
}
int dTgTouchTag::doDelete() {
return SUCCEEDED;
}
int dTgTouchTag::actorExecute() {
if (mChkFlag != 0xFF && SceneflagManager::sInstance->checkBoolFlag(roomid, mChkFlag)) {
SceneflagManager::sInstance->unsetFlag(roomid, mZoneFlag);
return SUCCEEDED;
}
mStateMgr.executeState();
return SUCCEEDED;
}
int dTgTouchTag::draw() {
return SUCCEEDED;
}
void dTgTouchTag::initializeState_Wait() {
mFlagTimer = 0;
}
void dTgTouchTag::executeState_Wait() {
dAcBase_c *actor = static_cast<dAcBase_c *>(fManager_c::searchBaseByProfName(ACTIVATORS[mActivatorIndex], nullptr));
while (actor != nullptr) {
if (actor->roomid == roomid && checkIfVec3fInMatrix(mAreaOfEffect, actor->position)) {
mFlagTimer = 5;
if (mZoneFlag != 0xFF) {
SceneflagManager::sInstance->setFlag(roomid, mZoneFlag);
}
break;
}
actor = static_cast<dAcBase_c *>(fManager_c::searchBaseByProfName(ACTIVATORS[mActivatorIndex], actor));
}
if (cM::calcTimer(&mFlagTimer) == 0) {
if (mZoneFlag != 0xFF && SceneflagManager::sInstance->checkBoolFlag(roomid, mZoneFlag)) {
SceneflagManager::sInstance->unsetFlag(roomid, mZoneFlag);
}
}
}
void dTgTouchTag::finalizeState_Wait() {}