mirror of
https://github.com/zeldaret/tww.git
synced 2026-06-02 18:18:29 -04:00
b77717694c
This fixes the sdata linker error in the debug build.
221 lines
6.4 KiB
C++
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,
|
|
};
|