From 7b6d64a6090637763caece978e36d2e4a3d94e8d Mon Sep 17 00:00:00 2001 From: korenkonder Date: Mon, 8 Apr 2024 04:35:24 +0300 Subject: [PATCH] Several fixes --- src/CRE/mdl/disp_manager.cpp | 2 ++ src/CRE/rob/ex_block.cpp | 5 +++-- src/CRE/rob/rob.hpp | 4 ++-- src/CRE/rob/skin_param.cpp | 7 ++++--- src/DivaGL/bone_data.cpp | 5 +++-- src/DivaGL/bone_data.hpp | 11 +++++++++-- 6 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/CRE/mdl/disp_manager.cpp b/src/CRE/mdl/disp_manager.cpp index 5a79c205..575be2bb 100644 --- a/src/CRE/mdl/disp_manager.cpp +++ b/src/CRE/mdl/disp_manager.cpp @@ -1319,6 +1319,7 @@ namespace mdl { float_t stack_angle = (float_t)((M_PI / 2.0) - (double_t)i * stack_step); float_t xz = cosf(stack_angle); float_t y = sinf(stack_angle); + y *= radius; data.reserve(6ULL * 2 * slices); @@ -1342,6 +1343,7 @@ namespace mdl { float_t stack_angle = (float_t)((M_PI / 2.0) - (double_t)i * stack_step); float_t xz = cosf(stack_angle); float_t y = sinf(stack_angle); + y *= radius; data.reserve(6ULL * 2 * slices); diff --git a/src/CRE/rob/ex_block.cpp b/src/CRE/rob/ex_block.cpp index a3d4fb6d..b9259345 100644 --- a/src/CRE/rob/ex_block.cpp +++ b/src/CRE/rob/ex_block.cpp @@ -3821,7 +3821,7 @@ static void sub_14047D620(RobOsage* rob_osg, float_t step) { vec3 v7 = nodes.data()[0].trans; OsageCollision::Work* coli = rob_osg->coli; OsageCollision::Work* coli_ring = rob_osg->coli_ring; - int32_t coli_type = rob_osg->skin_param_ptr->coli_type; + SkinParam::RootCollisionType coli_type = rob_osg->skin_param_ptr->coli_type; RobOsageNode* i_begin = nodes.data() + 1; RobOsageNode* i_end = nodes.data() + nodes.size(); for (RobOsageNode* i = i_begin; i != i_end; i++) { @@ -3834,7 +3834,8 @@ static void sub_14047D620(RobOsage* rob_osg, float_t step) { j->field_C8 += v17; } - if (coli_type && (coli_type != SkinParam::RootCollisionTypeBall || i != i_begin)) { + if (coli_type != SkinParam::RootCollisionTypeEnd + && (coli_type != SkinParam::RootCollisionTypeBall || i != i_begin)) { float_t v20 = (float_t)( OsageCollision::osage_capsule_cls(coli_ring, i[0].trans, i[-1].trans, data->skp_osg_node.coli_r) + OsageCollision::osage_capsule_cls(coli, i[0].trans, i[-1].trans, data->skp_osg_node.coli_r)); diff --git a/src/CRE/rob/rob.hpp b/src/CRE/rob/rob.hpp index e5c805ad..bca2f11a 100644 --- a/src/CRE/rob/rob.hpp +++ b/src/CRE/rob/rob.hpp @@ -1678,7 +1678,7 @@ struct skin_param_osage_root { float_t wind_afc; int32_t yz_order; std::vector boc; - int32_t coli_type; + SkinParam::RootCollisionType coli_type; float_t stiffness; float_t move_cancel; std::string colli_tgt_osg; @@ -1695,7 +1695,7 @@ struct skin_param { float_t air_res; vec3 rot; vec3 init_rot; - int32_t coli_type; + SkinParam::RootCollisionType coli_type; float_t stiffness; float_t move_cancel; float_t coli_r; diff --git a/src/CRE/rob/skin_param.cpp b/src/CRE/rob/skin_param.cpp index a8f58f74..674b8ebb 100644 --- a/src/CRE/rob/skin_param.cpp +++ b/src/CRE/rob/skin_param.cpp @@ -117,13 +117,14 @@ skin_param_osage_root_boc::~skin_param_osage_root_boc() { } skin_param_osage_root::skin_param_osage_root() : field_0(), force(), force_gain(), -rot_y(), rot_z(), init_rot_y(), init_rot_z(), coli_r(), yz_order(), coli_type(), stiffness() { +rot_y(), rot_z(), init_rot_y(), init_rot_z(), coli_r(), yz_order(), stiffness() { air_res = 0.5f; hinge_y = 90.0f; hinge_z = 90.0f; - name ="NO-PARAM"; + name = "NO-PARAM"; friction = 1.0f; wind_afc = 0.5f; + coli_type = SkinParam::RootCollisionTypeEnd; move_cancel = -0.01f; coli.resize(13); } @@ -358,7 +359,7 @@ void skin_param_osage_root_parse(void* kv, const char* name, int32_t coli_type = 0; if (_kv->read("coli_type", coli_type)) - skp_root.coli_type = coli_type; + skp_root.coli_type = (SkinParam::RootCollisionType)coli_type; float_t init_rot_y = 0.0f; float_t init_rot_z = 0.0f; diff --git a/src/DivaGL/bone_data.cpp b/src/DivaGL/bone_data.cpp index 30f8d9f5..b457ac00 100644 --- a/src/DivaGL/bone_data.cpp +++ b/src/DivaGL/bone_data.cpp @@ -971,7 +971,7 @@ static void sub_14047D620(RobOsage* rob_osg, float_t step) { vec3 v7 = nodes.data()[0].trans; OsageCollision::Work* coli = rob_osg->coli; OsageCollision::Work* coli_ring = rob_osg->coli_ring; - int32_t coli_type = rob_osg->skin_param_ptr->coli_type; + SkinParam::RootCollisionType coli_type = rob_osg->skin_param_ptr->coli_type; RobOsageNode* i_begin = nodes.data() + 1; RobOsageNode* i_end = nodes.data() + nodes.size(); for (RobOsageNode* i = i_begin; i != i_end; i++) { @@ -983,7 +983,8 @@ static void sub_14047D620(RobOsage* rob_osg, float_t step) { i->field_C8 += v17; j->field_C8 += v17; } - if (coli_type && (coli_type != 1 || i != i_begin)) { + if (coli_type != SkinParam::RootCollisionTypeEnd + && (coli_type != SkinParam::RootCollisionTypeBall || i != i_begin)) { float_t v20 = (float_t)( OsageCollision::osage_capsule_cls(coli_ring, i[0].trans, i[-1].trans, data->skp_osg_node.coli_r) + OsageCollision::osage_capsule_cls(coli, i[0].trans, i[-1].trans, data->skp_osg_node.coli_r)); diff --git a/src/DivaGL/bone_data.hpp b/src/DivaGL/bone_data.hpp index 2d7d600f..310622e5 100644 --- a/src/DivaGL/bone_data.hpp +++ b/src/DivaGL/bone_data.hpp @@ -853,6 +853,13 @@ namespace SkinParam { CollisionTypeAABB = 0x5, CollisionTypeMax = 0x6, }; + + enum RootCollisionType { + RootCollisionTypeEnd = 0x0, + RootCollisionTypeBall = 0x1, + RootCollisionTypeCapsule = 0x2, + RootCollisionTypeMax = 0x3, + }; } enum shadow_type_enum { @@ -2964,7 +2971,7 @@ struct skin_param_osage_root { float_t wind_afc; int32_t yz_order; prj::vector boc; - int32_t coli_type; + SkinParam::RootCollisionType coli_type; float_t stiffness; float_t move_cancel; prj::string colli_tgt_osg; @@ -3176,7 +3183,7 @@ struct skin_param { float_t air_res; vec3 rot; vec3 init_rot; - int32_t coli_type; + SkinParam::RootCollisionType coli_type; float_t stiffness; float_t move_cancel; float_t coli_r;