Files
tww/src/d/actor/d_a_grass.cpp
T
LagoLunatic b77717694c Add dolzel_rel.pch
This fixes the sdata linker error in the debug build.
2025-08-23 12:17:10 -04:00

221 lines
6.4 KiB
C++

//
// Generated by dtk
// Translation Unit: d_a_grass.cpp
//
#include "d/dolzel_rel.h" // IWYU pragma: keep
#include "d/actor/d_a_grass.h"
#include "f_op/f_op_actor.h"
#include "f_op/f_op_actor_mng.h"
#include "d/d_com_inf_game.h"
#include "d/d_flower.h"
#include "d/d_grass.h"
#include "d/d_procname.h"
#include "d/d_priority.h"
#include "d/d_tree.h"
#include "SSystem/SComponent/c_sxyz.h"
namespace daGrass_prm {
inline s8 getItemNo(grass_class* ac) { return (fopAcM_GetParam(ac) >> 6) & 0x3F; }
inline u8 getKind(grass_class* ac) { return (fopAcM_GetParam(ac) >> 4) & 0x03; }
inline u8 getType(grass_class* ac) { return (fopAcM_GetParam(ac) >> 0) & 0x0F; }
};
/* 000000EC-000000F4 .text daGrass_IsDelete__FP11grass_class */
static BOOL daGrass_IsDelete(grass_class*) {
return TRUE;
}
/* 000000F4-000000FC .text daGrass_Delete__FP11grass_class */
static BOOL daGrass_Delete(grass_class*) {
return TRUE;
}
/* 000000FC-000014E0 .text daGrass_Create__FP10fopAc_ac_c */
static cPhs_State daGrass_Create(fopAc_ac_c* i_ac) {
static const csXyz l_setType0[] = {
csXyz(0, 0, 0),
csXyz(3, 0, -50),
csXyz(-2, 0, 50),
csXyz(50, 0, 27),
csXyz(52, 0, -25),
csXyz(-50, 0, 22),
csXyz(-50, 0, -29),
};
static const csXyz l_setType1[] = {
csXyz(-18, 0, 76),
csXyz(-15, 0, 26),
csXyz(133, 0, 0),
csXyz(80, 0, 23),
csXyz(86, 0, -83),
csXyz(33, 0, -56),
csXyz(83, 0, -27),
csXyz(-120, 0, -26),
csXyz(-18, 0, -74),
csXyz(-20, 0, -21),
csXyz(-73, 0, 1),
csXyz(-67, 0, -102),
csXyz(-21, 0, 126),
csXyz(-120, 0, -78),
csXyz(-70, 0, -49),
csXyz(32, 0, 103),
csXyz(34, 0, 51),
csXyz(-72, 0, 98),
csXyz(-68, 0, 47),
csXyz(33, 0, -5),
csXyz(135, 0, -53),
};
static const csXyz l_setType2[] = {
csXyz(-75, 0, -50),
csXyz(75, 0, -25),
csXyz(14, 0, 106),
};
static const csXyz l_setType3[] = {
csXyz(-24, 0, -28),
csXyz(27, 0, -28),
csXyz(-21, 0, 33),
csXyz(-18, 0, -34),
csXyz(44, 0, -4),
csXyz(41, 0, 10),
csXyz(24, 0, 39),
};
static const csXyz l_setType4[] = {
csXyz(-55, 0, -22),
csXyz(-28, 0, -50),
csXyz(-77, 0, 11),
csXyz(55, 0, -44),
csXyz(83, 0, -71),
csXyz(11, 0, -48),
csXyz(97, 0, -34),
csXyz(-74, 0, -57),
csXyz(31, 0, 58),
csXyz(59, 0, 30),
csXyz(13, 0, 23),
csXyz(-12, 0, 54),
csXyz(55, 0, 97),
csXyz(10, 0, 92),
csXyz(33, 0, -10),
csXyz(-99, 0, -27),
csXyz(40, 0, -87),
};
static const csXyz l_setType5[] = {
csXyz(0, 0, 3),
csXyz(-26, 0, -29),
csXyz(7, 0, -25),
csXyz(31, 0, -5),
csXyz(-7, 0, 40),
csXyz(-35, 0, 15),
csXyz(23, 0, 32),
};
static const csXyz l_setType6[] = {
csXyz(-40, 0, 0),
csXyz(0, 0, 0),
csXyz(80, 0, 0),
csXyz(-80, 0, 0),
csXyz(40, 0, 0),
};
static struct OffsetData {
u8 num;
const csXyz * pos;
} l_offsetData[] = {
{ 1, l_setType0 },
{ 7, l_setType0 },
{ 21, l_setType1 },
{ 3, l_setType2 },
{ 7, l_setType3 },
{ 17, l_setType4 },
{ 7, l_setType5 },
{ 5, l_setType6 },
};
grass_class * i_this = (grass_class*)i_ac;
fopAcM_SetupActor(i_this, grass_class);
u32 grp = daGrass_prm::getType(i_this);
OffsetData * offset = &l_offsetData[grp];
const csXyz * ofpos = offset->pos;
u32 kind = daGrass_prm::getKind(i_this);
cXyz * acpos = &i_this->current.pos;
if (kind == 0) {
// grass
if (dComIfGp_createGrass() != NULL) {
s8 item = daGrass_prm::getItemNo(i_this);
if (item < 0x20 || item >= 0x40)
item = -1;
for (s32 i = 0; i < offset->num; ofpos++, i++) {
cXyz pos;
pos.x = acpos->x + ofpos->x;
pos.y = acpos->y;
pos.z = acpos->z + ofpos->z;
dComIfGp_getGrass()->newData(pos, fopAcM_GetRoomNo(i_this), item);
}
}
} else if (kind == 1) {
// tree
if (dComIfGp_createTree() != NULL) {
f32 cosR = cM_scos(i_this->current.angle.y), sinR = cM_ssin(i_this->current.angle.y);
cXyz pos;
pos.y = acpos->y;
for (s32 i = 0; i < offset->num; ofpos++, i++) {
pos.x = acpos->x + (ofpos->x * cosR + ofpos->z * sinR);
pos.y = acpos->y;
pos.z = acpos->z + (ofpos->z * cosR - ofpos->x * sinR);
dComIfGp_getTree()->newData(pos, 0, fopAcM_GetRoomNo(i_this));
}
}
} else if (kind == 2 || kind == 3) {
// white flower, pink flower
if (dComIfGp_createFlower() != NULL) {
s8 item = daGrass_prm::getItemNo(i_this);
if (item < 0x20 || item >= 0x40)
item = 0xFF;
s8 flowerType;
if (kind == 2)
flowerType = 1;
else if (kind == 3)
flowerType = 2;
for (s32 i = 0; i < offset->num; ofpos++, i++) {
cXyz pos;
pos.x = acpos->x + ofpos->x;
pos.y = acpos->y;
pos.z = acpos->z + ofpos->z;
dComIfGp_getFlower()->newData(flowerType, pos, fopAcM_GetRoomNo(i_this), item);
}
}
}
return cPhs_ERROR_e;
}
static actor_method_class daGrass_METHODS = {
(process_method_func)daGrass_Create,
(process_method_func)daGrass_Delete,
(process_method_func)NULL,
(process_method_func)daGrass_IsDelete,
(process_method_func)NULL,
};
actor_process_profile_definition g_profile_GRASS = {
/* LayerID */ fpcLy_CURRENT_e,
/* ListID */ 0x0007,
/* ListPrio */ fpcPi_CURRENT_e,
/* ProcName */ PROC_GRASS,
/* Proc SubMtd */ &g_fpcLf_Method.base,
/* Size */ sizeof(grass_class),
/* SizeOther */ 0,
/* Parameters */ 0,
/* Leaf SubMtd */ &g_fopAc_Method.base,
/* Priority */ PRIO_GRASS,
/* Actor SubMtd */ &daGrass_METHODS,
/* Status */ fopAcStts_UNK40000_e,
/* Group */ fopAc_ACTOR_e,
/* CullType */ fopAc_CULLBOX_0_e,
};