mirror of
https://github.com/zeldaret/tww.git
synced 2026-06-03 02:28:37 -04:00
228 lines
6.6 KiB
C++
228 lines
6.6 KiB
C++
//
|
|
// Generated by dtk
|
|
// Translation Unit: d_a_switem.cpp
|
|
//
|
|
|
|
#include "d/actor/d_a_switem.h"
|
|
#include "f_op/f_op_actor_mng.h"
|
|
#include "d/d_procname.h"
|
|
#include "d/d_cc_d.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/d_item.h"
|
|
#include "d/actor/d_a_item.h"
|
|
|
|
static dCcD_SrcCyl l_cyl_src = {
|
|
// dCcD_SrcGObjInf
|
|
{
|
|
/* Flags */ 0,
|
|
/* SrcObjAt Type */ 0,
|
|
/* SrcObjAt Atp */ 0,
|
|
/* SrcObjAt SPrm */ 0,
|
|
/* SrcObjTg Type */ AT_TYPE_ALL,
|
|
/* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsOther_e,
|
|
/* SrcObjCo SPrm */ 0,
|
|
/* SrcGObjAt Se */ 0,
|
|
/* SrcGObjAt HitMark */ 0,
|
|
/* SrcGObjAt Spl */ 0,
|
|
/* SrcGObjAt Mtrl */ 0,
|
|
/* SrcGObjAt SPrm */ 0,
|
|
/* SrcGObjTg Se */ 0,
|
|
/* SrcGObjTg HitMark */ 0,
|
|
/* SrcGObjTg Spl */ 0,
|
|
/* SrcGObjTg Mtrl */ 0,
|
|
/* SrcGObjTg SPrm */ dCcG_TgSPrm_NoHitMark_e,
|
|
/* SrcGObjCo SPrm */ 0,
|
|
},
|
|
// cM3dGCylS
|
|
{
|
|
/* Center */ 0.0f, 0.0f, 0.0f,
|
|
/* Radius */ 25.0f,
|
|
/* Height */ 50.0f,
|
|
},
|
|
};
|
|
|
|
/* 00000078-00000080 .text _delete__10daSwItem_cFv */
|
|
bool daSwItem_c::_delete() {
|
|
return true;
|
|
}
|
|
|
|
/* 00000080-00000154 .text CreateInit__10daSwItem_cFv */
|
|
BOOL daSwItem_c::CreateInit() {
|
|
int itemBitNo = daSwItem_prm::getItemBitNo(this);
|
|
mAtTypeTrigger = daSwItem_prm::getAtType(this);
|
|
|
|
mStts.Init(0xFF, 0xFF, this);
|
|
mCyl.Set(l_cyl_src);
|
|
mCyl.SetStts(&mStts);
|
|
mCyl.SetR(scale.x * 25.0f);
|
|
mCyl.SetH(scale.y * 50.0f);
|
|
|
|
if (fopAcM_isItem(this, itemBitNo) && itemBitNo != 0x7F) {
|
|
return FALSE;
|
|
}
|
|
|
|
fopAcM_offDraw(this);
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00000154-00000250 .text _create__10daSwItem_cFv */
|
|
s32 daSwItem_c::_create() {
|
|
fopAcM_SetupActor(this, daSwItem_c);
|
|
|
|
if (!CreateInit()) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
return cPhs_COMPLEATE_e;
|
|
}
|
|
|
|
/* 00000408-000006DC .text _execute__10daSwItem_cFv */
|
|
bool daSwItem_c::_execute() {
|
|
bool triggered = false;
|
|
if (mCyl.ChkTgHit()) {
|
|
cCcD_Obj* obj = mCyl.GetTgHitObj();
|
|
if(obj) {
|
|
switch (mAtTypeTrigger) {
|
|
case 0xFF:
|
|
triggered = true;
|
|
break;
|
|
case 0:
|
|
if (obj->ChkAtType(AT_TYPE_SWORD) || obj->ChkAtType(AT_TYPE_BOKO_STICK) ||
|
|
obj->ChkAtType(AT_TYPE_STALFOS_MACE) || obj->ChkAtType(AT_TYPE_MACHETE) ||
|
|
obj->ChkAtType(AT_TYPE_DARKNUT_SWORD))
|
|
{
|
|
triggered = true;
|
|
}
|
|
break;
|
|
case 1:
|
|
if (obj->ChkAtType(AT_TYPE_BOMB)) {
|
|
triggered = true;
|
|
}
|
|
break;
|
|
case 2:
|
|
if (obj->ChkAtType(AT_TYPE_BOOMERANG)) {
|
|
triggered = true;
|
|
}
|
|
break;
|
|
case 3:
|
|
if (obj->ChkAtType(AT_TYPE_SKULL_HAMMER)) {
|
|
triggered = true;
|
|
}
|
|
break;
|
|
case 4:
|
|
if (obj->ChkAtType(AT_TYPE_FIRE_ARROW) || obj->ChkAtType(AT_TYPE_ICE_ARROW) ||
|
|
obj->ChkAtType(AT_TYPE_LIGHT_ARROW) || obj->ChkAtType(AT_TYPE_NORMAL_ARROW))
|
|
{
|
|
triggered = true;
|
|
}
|
|
break;
|
|
case 5:
|
|
if (obj->ChkAtType(0x8000)) {
|
|
triggered = true;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (triggered && !mSpawnedItem) {
|
|
int itemTbl = daSwItem_prm::getItemTbl(this);
|
|
int itemBitNo = daSwItem_prm::getItemBitNo(this);
|
|
if (fopAcM_isItem(this, daSwItem_prm::getItemBitNo(this))) {
|
|
itemBitNo = 0x7F;
|
|
}
|
|
|
|
csXyz angle(0, home.angle.y, 0);
|
|
fpc_ProcID itemProcId = fopAcM_createItemFromTable(
|
|
¤t.pos, itemTbl, itemBitNo,
|
|
fopAcM_GetHomeRoomNo(this), 0, &angle, 1
|
|
);
|
|
|
|
daItem_c* item = (daItem_c*)fopAcM_SearchByID(itemProcId);
|
|
if(item) {
|
|
if (isRupee(item->getItemNo()) || isRupeeInAllCreateTable(itemTbl)) {
|
|
fopAcM_seStart(this, JA_SE_OBJ_LUPY_OUT, 0);
|
|
} else {
|
|
fopAcM_seStart(this, JA_SE_OBJ_ITEM_OUT, 0);
|
|
}
|
|
}
|
|
|
|
mSpawnedItem = true;
|
|
}
|
|
|
|
mCyl.SetC(current.pos);
|
|
dComIfG_Ccsp()->Set(&mCyl);
|
|
|
|
return true;
|
|
}
|
|
|
|
/* 000006DC-0000076C .text isRupeeInAllCreateTable__10daSwItem_cFi */
|
|
BOOL daSwItem_c::isRupeeInAllCreateTable(int param_1) {
|
|
ItemTableList* itemTableList = dComIfGp_getItemTable();
|
|
if (param_1 >= 0x20 && param_1 <= 0x3E && itemTableList) {
|
|
u8* itemNo = itemTableList->mItemTables[param_1 - 0x20];
|
|
for (int i = 0; i < 0x10; i++) {
|
|
if (isRupee(*itemNo)) {
|
|
return true;
|
|
}
|
|
itemNo++;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/* 0000076C-00000774 .text _draw__10daSwItem_cFv */
|
|
bool daSwItem_c::_draw() {
|
|
return true;
|
|
}
|
|
|
|
/* 00000774-00000794 .text daSwItem_Create__FPv */
|
|
static BOOL daSwItem_Create(void* i_this) {
|
|
return static_cast<daSwItem_c*>(i_this)->_create();
|
|
}
|
|
|
|
/* 00000794-000007B8 .text daSwItem_Delete__FPv */
|
|
static BOOL daSwItem_Delete(void* i_this) {
|
|
return static_cast<daSwItem_c*>(i_this)->_delete();
|
|
}
|
|
|
|
/* 000007B8-000007DC .text daSwItem_Draw__FPv */
|
|
static BOOL daSwItem_Draw(void* i_this) {
|
|
return static_cast<daSwItem_c*>(i_this)->_draw();
|
|
}
|
|
|
|
/* 000007DC-00000800 .text daSwItem_Execute__FPv */
|
|
static BOOL daSwItem_Execute(void* i_this) {
|
|
return static_cast<daSwItem_c*>(i_this)->_execute();
|
|
}
|
|
|
|
/* 00000800-00000808 .text daSwItem_IsDelete__FPv */
|
|
static BOOL daSwItem_IsDelete(void* i_this) {
|
|
return TRUE;
|
|
}
|
|
|
|
static actor_method_class daSwItemMethodTable = {
|
|
(process_method_func)daSwItem_Create,
|
|
(process_method_func)daSwItem_Delete,
|
|
(process_method_func)daSwItem_Execute,
|
|
(process_method_func)daSwItem_IsDelete,
|
|
(process_method_func)daSwItem_Draw,
|
|
};
|
|
|
|
actor_process_profile_definition g_profile_SW_ITEM = {
|
|
/* LayerID */ fpcLy_CURRENT_e,
|
|
/* ListID */ 0x0007,
|
|
/* ListPrio */ fpcPi_CURRENT_e,
|
|
/* ProcName */ PROC_SW_ITEM,
|
|
/* Proc SubMtd */ &g_fpcLf_Method.base,
|
|
/* Size */ sizeof(daSwItem_c),
|
|
/* SizeOther */ 0,
|
|
/* Parameters */ 0,
|
|
/* Leaf SubMtd */ &g_fopAc_Method.base,
|
|
/* Priority */ 0x013A,
|
|
/* Actor SubMtd */ &daSwItemMethodTable,
|
|
/* Status */ fopAcStts_CULL_e | fopAcStts_UNK40000_e,
|
|
/* Group */ fopAc_ACTOR_e,
|
|
/* CullType */ fopAc_CULLBOX_CUSTOM_e,
|
|
};
|