Rob: adapt new findings

This commit is contained in:
korenkonder
2024-07-02 10:38:06 +03:00
parent 5c4757a0bb
commit 9468cc5352
3 changed files with 144 additions and 144 deletions
+3 -3
View File
@@ -1105,8 +1105,8 @@ void RobOsageTest::disp_coli() {
etc.data.capsule.slices = 16;
etc.data.capsule.stacks = 16;
etc.data.capsule.wire = false;
etc.data.capsule.pos[0] = i[-1].trans;
etc.data.capsule.pos[1] = i[ 0].trans;
etc.data.capsule.pos[0] = i[-1].pos;
etc.data.capsule.pos[1] = i[ 0].pos;
disp_manager->entry_obj_etc(&mat4_identity, &etc);
}
}
@@ -1127,7 +1127,7 @@ void RobOsageTest::disp_coli() {
vec3 pos;
mat4 mat;
mat4_transpose(&itm_eq_obj->item_equip->mat, &mat);
mat4_transform_point(&mat, &i->trans, &pos);
mat4_transform_point(&mat, &i->pos, &pos);
mat4_translate(&pos, &mat);
mat4_transpose(&mat, &mat);
+40 -40
View File
@@ -39,7 +39,7 @@ struct rob_chara_age_age_object {
obj_mesh_vertex_buffer obj_vert_buf;
#endif
obj_mesh_index_buffer obj_index_buf;
vec3 trans[10];
vec3 pos[10];
int32_t disp_count;
int32_t count;
bool field_C3C;
@@ -53,7 +53,7 @@ static_assert(sizeof(rob_chara_age_age_object) == 0xC40, "\"rob_chara_age_age_ob
struct rob_chara_age_age_data {
int32_t index;
int32_t part_id;
vec3 trans;
vec3 pos;
float_t field_14;
float_t rot_z;
int32_t field_1C;
@@ -93,7 +93,7 @@ static_assert(sizeof(rob_chara_age_age) == 0x1658, "\"rob_chara_age_age\" struct
struct rob_chara_item_adjust_x {
mat4 mat;
vec3 trans;
vec3 pos;
float_t scale;
rob_chara_item_adjust_x();
@@ -345,7 +345,7 @@ HOOK(void, FASTCALL, RobCloth__UpdateVertexBuffer, 0x000000014021CF00, obj_mesh*
for (int32_t j = indices_count; j; j--, indices++) {
CLOTHNode* node = &nodes[*indices];
*(vec3*)data = node->trans;
*(vec3*)data = node->pos;
*(vec3*)(data + 0x0C) = node->normal * facing;
*(vec3*)(data + 0x18) = node->tangent;
*(float_t*)(data + 0x24) = node->tangent_sign;
@@ -361,7 +361,7 @@ HOOK(void, FASTCALL, RobCloth__UpdateVertexBuffer, 0x000000014021CF00, obj_mesh*
for (int32_t j = indices_count; j; j--, indices++) {
CLOTHNode* node = &nodes[*indices];
*(vec3*)data = node->trans;
*(vec3*)data = node->pos;
*(vec3*)(data + 0x0C) = node->normal * facing;
data += mesh->size_vertex;
@@ -377,7 +377,7 @@ HOOK(void, FASTCALL, RobCloth__UpdateVertexBuffer, 0x000000014021CF00, obj_mesh*
for (int32_t j = indices_count; j; j--, indices++) {
CLOTHNode* node = &nodes[*indices];
*(vec3*)data = node->trans;
*(vec3*)data = node->pos;
vec3_to_vec3i16(node->normal * (32767.0f * facing), *(vec3i16*)(data + 0x0C));
*(int16_t*)(data + 0x12) = 0;
@@ -398,7 +398,7 @@ HOOK(void, FASTCALL, RobCloth__UpdateVertexBuffer, 0x000000014021CF00, obj_mesh*
for (int32_t j = indices_count; j; j--, indices++) {
CLOTHNode* node = &nodes[*indices];
*(vec3*)data = node->trans;
*(vec3*)data = node->pos;
vec3_to_vec3i16(node->normal * (32767.0f * facing), *(vec3i16*)(data + 0x0C));
*(int16_t*)(data + 0x12) = 0;
@@ -415,7 +415,7 @@ HOOK(void, FASTCALL, RobCloth__UpdateVertexBuffer, 0x000000014021CF00, obj_mesh*
for (int32_t j = indices_count; j; j--, indices++) {
CLOTHNode* node = &nodes[*indices];
*(vec3*)data = node->trans;
*(vec3*)data = node->pos;
vec3i16 normal_int;
vec3_to_vec3i16(node->normal * 511.0f, normal_int);
@@ -446,7 +446,7 @@ HOOK(void, FASTCALL, RobCloth__UpdateVertexBuffer, 0x000000014021CF00, obj_mesh*
for (int32_t j = indices_count; j; j--, indices++) {
CLOTHNode* node = &nodes[*indices];
*(vec3*)data = node->trans;
*(vec3*)data = node->pos;
vec3i16 normal_int;
vec3_to_vec3i16(node->normal * 511.0f, normal_int);
@@ -493,76 +493,76 @@ HOOK(void, FASTCALL, sub_1405044B0, 0x00000001405044B0, rob_chara* rob_chr) {
originalsub_1405044B0(rob_chr);
}
static void rob_chara_data_adjuct_set_trans(rob_chara_adjust_data* rob_chr_adj,
rob_chara_item_adjust_x* rob_chr_itm_adj_x, vec3& trans, bool pos_adjust, vec3* global_trans) {
static void rob_chara_data_adjuct_set_pos(rob_chara_adjust_data* rob_chr_adj,
rob_chara_item_adjust_x* rob_chr_itm_adj_x, const vec3& pos, bool pos_adjust, const vec3* global_position) {
float_t scale = rob_chr_adj->scale;
float_t item_scale = rob_chr_itm_adj_x->scale;
vec3 _offset = rob_chr_adj->offset;
if (global_trans)
_offset.y += global_trans->y;
if (global_position)
_offset.y += global_position->y;
vec3 _trans = trans;
vec3 _item_trans = trans;
vec3 _pos = pos;
vec3 _item_pos = pos;
if (rob_chr_adj->height_adjust) {
_trans.y += rob_chr_adj->pos_adjust_y;
_item_trans.y += rob_chr_adj->pos_adjust_y;
_pos.y += rob_chr_adj->pos_adjust_y;
_item_pos.y += rob_chr_adj->pos_adjust_y;
}
else {
vec3 temp = (_trans - _offset) * scale + _offset;
vec3 arm_temp = (_item_trans - _offset) * item_scale + _offset;
vec3 temp = (_pos - _offset) * scale + _offset;
vec3 arm_temp = (_item_pos - _offset) * item_scale + _offset;
if (!rob_chr_adj->offset_x) {
_trans.x = temp.x;
_item_trans.x = arm_temp.x;
_pos.x = temp.x;
_item_pos.x = arm_temp.x;
}
if (!rob_chr_adj->offset_y) {
_trans.y = temp.y;
_item_trans.y = arm_temp.y;
_pos.y = temp.y;
_item_pos.y = arm_temp.y;
}
if (!rob_chr_adj->offset_z) {
_trans.z = temp.z;
_item_trans.z = arm_temp.z;
_pos.z = temp.z;
_item_pos.z = arm_temp.z;
}
}
if (pos_adjust) {
_trans = rob_chr_adj->pos_adjust + _trans;
_item_trans = rob_chr_adj->pos_adjust + _item_trans;
_pos = rob_chr_adj->pos_adjust + _pos;
_item_pos = rob_chr_adj->pos_adjust + _item_pos;
}
rob_chr_adj->trans = _trans - trans * scale;
rob_chr_itm_adj_x->trans = _item_trans - trans * item_scale;
rob_chr_adj->pos = _pos - pos * scale;
rob_chr_itm_adj_x->pos = _item_pos - pos * item_scale;
}
HOOK(void, FASTCALL, rob_chara_set_data_adjust_mat, 0x00000001405050D0,
rob_chara* rob_chr, rob_chara_adjust_data* rob_chr_adj, bool pos_adjust) {
mat4 mat = *rob_chara_bone_data_get_mats_mat((size_t)rob_chr->bone_data, ROB_BONE_N_HARA_CP);
vec3 trans;
vec3 pos;
mat4_transpose(&mat, &mat);
mat4_get_translation(&mat, &trans);
mat4_get_translation(&mat, &pos);
rob_chara_item_adjust_x* item_adjust = &rob_chara_item_adjust_x_array[rob_chr->chara_id];
vec3* global_trans = 0;
if (rob_chr_adj->get_global_trans) {
static vec3* (FASTCALL * rob_chara_bone_data_get_global_trans)(size_t rob_bone_data)
vec3* global_position = 0;
if (rob_chr_adj->get_global_position) {
static vec3* (FASTCALL * rob_chara_bone_data_get_global_position)(size_t rob_bone_data)
= (vec3 * (FASTCALL*)(size_t rob_bone_data))0x0000000140419360;
global_trans = rob_chara_bone_data_get_global_trans((size_t)rob_chr->bone_data);
global_position = rob_chara_bone_data_get_global_position((size_t)rob_chr->bone_data);
}
rob_chara_data_adjuct_set_trans(rob_chr_adj, item_adjust, trans, pos_adjust, global_trans);
rob_chara_data_adjuct_set_pos(rob_chr_adj, item_adjust, pos, pos_adjust, global_position);
float_t scale = rob_chr_adj->scale;
mat4_scale(scale, scale, scale, &rob_chr_adj->mat);
mat4_set_translation(&rob_chr_adj->mat, &rob_chr_adj->trans);
mat4_set_translation(&rob_chr_adj->mat, &rob_chr_adj->pos);
mat4_transpose(&rob_chr_adj->mat, &rob_chr_adj->mat);
float_t item_scale = item_adjust->scale;
mat4_scale(item_scale, item_scale, item_scale, &item_adjust->mat);
mat4_set_translation(&item_adjust->mat, &item_adjust->trans);
mat4_set_translation(&item_adjust->mat, &item_adjust->pos);
mat4_transpose(&item_adjust->mat, &item_adjust->mat);
}
@@ -908,7 +908,7 @@ void rob_chara_age_age_object::disp(size_t chara_index,
std::pair<float_t, int32_t> v44[10];
for (int32_t i = 0; i < disp_count; i++) {
v44[i].first = vec3::dot(trans[i], a5);
v44[i].first = vec3::dot(pos[i], a5);
v44[i].second = i;
}
@@ -961,7 +961,7 @@ rob_chara_item_adjust_x::rob_chara_item_adjust_x() : scale() {
}
void rob_chara_item_adjust_x::reset() {
mat4_translate(&trans, &mat);
mat4_translate(&pos, &mat);
mat4_transpose(&mat, &mat);
scale = 1.0f;
}
+101 -101
View File
@@ -250,95 +250,95 @@ enum mot_bone_index {
};
enum mothead_data_type {
MOTHEAD_DATA_TYPE_0 = 0x00,
MOTHEAD_DATA_TYPE_1 = 0x01,
MOTHEAD_DATA_TYPE_2 = 0x02,
MOTHEAD_DATA_TYPE_3 = 0x03,
MOTHEAD_DATA_TYPE_4 = 0x04,
MOTHEAD_DATA_TYPE_5 = 0x05,
MOTHEAD_DATA_TYPE_6 = 0x06,
MOTHEAD_DATA_TYPE_7 = 0x07,
MOTHEAD_DATA_TYPE_8 = 0x08,
MOTHEAD_DATA_TYPE_9 = 0x09,
MOTHEAD_DATA_TYPE_10 = 0x0A,
MOTHEAD_DATA_TYPE_11 = 0x0B,
MOTHEAD_DATA_TYPE_12 = 0x0C,
MOTHEAD_DATA_TYPE_13 = 0x0D,
MOTHEAD_DATA_TYPE_14 = 0x0E,
MOTHEAD_DATA_TYPE_15 = 0x0F,
MOTHEAD_DATA_TYPE_16 = 0x10,
MOTHEAD_DATA_TYPE_17 = 0x11,
MOTHEAD_DATA_TYPE_18 = 0x12,
MOTHEAD_DATA_TYPE_19 = 0x13,
MOTHEAD_DATA_TYPE_20 = 0x14,
MOTHEAD_DATA_TYPE_21 = 0x15,
MOTHEAD_DATA_TYPE_22 = 0x16,
MOTHEAD_DATA_TYPE_23 = 0x17,
MOTHEAD_DATA_TYPE_24 = 0x18,
MOTHEAD_DATA_TYPE_25 = 0x19,
MOTHEAD_DATA_TYPE_26 = 0x1A,
MOTHEAD_DATA_TYPE_27 = 0x1B,
MOTHEAD_DATA_TYPE_28 = 0x1C,
MOTHEAD_DATA_TYPE_29 = 0x1D,
MOTHEAD_DATA_TYPE_30 = 0x1E,
MOTHEAD_DATA_TYPE_31 = 0x1F,
MOTHEAD_DATA_TYPE_32 = 0x20,
MOTHEAD_DATA_TYPE_33 = 0x21,
MOTHEAD_DATA_TYPE_34 = 0x22,
MOTHEAD_DATA_TYPE_35 = 0x23,
MOTHEAD_DATA_TYPE_36 = 0x24,
MOTHEAD_DATA_TYPE_37 = 0x25,
MOTHEAD_DATA_TYPE_38 = 0x26,
MOTHEAD_DATA_TYPE_39 = 0x27,
MOTHEAD_DATA_TYPE_40 = 0x28,
MOTHEAD_DATA_TYPE_41 = 0x29,
MOTHEAD_DATA_TYPE_42 = 0x2A,
MOTHEAD_DATA_TYPE_43 = 0x2B,
MOTHEAD_DATA_TYPE_44 = 0x2C,
MOTHEAD_DATA_TYPE_45 = 0x2D,
MOTHEAD_DATA_TYPE_46 = 0x2E,
MOTHEAD_DATA_TYPE_47 = 0x2F,
MOTHEAD_DATA_TYPE_48 = 0x30,
MOTHEAD_DATA_TYPE_49 = 0x31,
MOTHEAD_DATA_SET_FACE_MOTION_ID = 0x32,
MOTHEAD_DATA_TYPE_51 = 0x33,
MOTHEAD_DATA_TYPE_52 = 0x34,
MOTHEAD_DATA_SET_FACE_MOTTBL_MOTION = 0x35,
MOTHEAD_DATA_SET_HAND_R_MOTTBL_MOTION = 0x36,
MOTHEAD_DATA_SET_HAND_L_MOTTBL_MOTION = 0x37,
MOTHEAD_DATA_SET_MOUTH_MOTTBL_MOTION = 0x38,
MOTHEAD_DATA_SET_EYES_MOTTBL_MOTION = 0x39,
MOTHEAD_DATA_SET_EYELID_MOTTBL_MOTION = 0x3A,
MOTHEAD_DATA_SET_ROB_CHARA_HEAD_OBJECT = 0x3B,
MOTHEAD_DATA_TYPE_60 = 0x3C,
MOTHEAD_DATA_TYPE_0 = 0x00,
MOTHEAD_DATA_TYPE_1 = 0x01,
MOTHEAD_DATA_TYPE_2 = 0x02,
MOTHEAD_DATA_TYPE_3 = 0x03,
MOTHEAD_DATA_TYPE_4 = 0x04,
MOTHEAD_DATA_TYPE_5 = 0x05,
MOTHEAD_DATA_TYPE_6 = 0x06,
MOTHEAD_DATA_TYPE_7 = 0x07,
MOTHEAD_DATA_TYPE_8 = 0x08,
MOTHEAD_DATA_TYPE_9 = 0x09,
MOTHEAD_DATA_TYPE_10 = 0x0A,
MOTHEAD_DATA_TYPE_11 = 0x0B,
MOTHEAD_DATA_TYPE_12 = 0x0C,
MOTHEAD_DATA_TYPE_13 = 0x0D,
MOTHEAD_DATA_TYPE_14 = 0x0E,
MOTHEAD_DATA_TYPE_15 = 0x0F,
MOTHEAD_DATA_TYPE_16 = 0x10,
MOTHEAD_DATA_TYPE_17 = 0x11,
MOTHEAD_DATA_TYPE_18 = 0x12,
MOTHEAD_DATA_TYPE_19 = 0x13,
MOTHEAD_DATA_TYPE_20 = 0x14,
MOTHEAD_DATA_TYPE_21 = 0x15,
MOTHEAD_DATA_TYPE_22 = 0x16,
MOTHEAD_DATA_TYPE_23 = 0x17,
MOTHEAD_DATA_TYPE_24 = 0x18,
MOTHEAD_DATA_TYPE_25 = 0x19,
MOTHEAD_DATA_TYPE_26 = 0x1A,
MOTHEAD_DATA_TYPE_27 = 0x1B,
MOTHEAD_DATA_TYPE_28 = 0x1C,
MOTHEAD_DATA_TYPE_29 = 0x1D,
MOTHEAD_DATA_TYPE_30 = 0x1E,
MOTHEAD_DATA_TYPE_31 = 0x1F,
MOTHEAD_DATA_TYPE_32 = 0x20,
MOTHEAD_DATA_TYPE_33 = 0x21,
MOTHEAD_DATA_TYPE_34 = 0x22,
MOTHEAD_DATA_TYPE_35 = 0x23,
MOTHEAD_DATA_TYPE_36 = 0x24,
MOTHEAD_DATA_TYPE_37 = 0x25,
MOTHEAD_DATA_TYPE_38 = 0x26,
MOTHEAD_DATA_TYPE_39 = 0x27,
MOTHEAD_DATA_TYPE_40 = 0x28,
MOTHEAD_DATA_TYPE_41 = 0x29,
MOTHEAD_DATA_TYPE_42 = 0x2A,
MOTHEAD_DATA_TYPE_43 = 0x2B,
MOTHEAD_DATA_TYPE_44 = 0x2C,
MOTHEAD_DATA_TYPE_45 = 0x2D,
MOTHEAD_DATA_TYPE_46 = 0x2E,
MOTHEAD_DATA_TYPE_47 = 0x2F,
MOTHEAD_DATA_TYPE_48 = 0x30,
MOTHEAD_DATA_TYPE_49 = 0x31,
MOTHEAD_DATA_SET_FACE_MOTION_ID = 0x32,
MOTHEAD_DATA_TYPE_51 = 0x33,
MOTHEAD_DATA_TYPE_52 = 0x34,
MOTHEAD_DATA_SET_FACE_MOTTBL_MOTION = 0x35,
MOTHEAD_DATA_SET_HAND_R_MOTTBL_MOTION = 0x36,
MOTHEAD_DATA_SET_HAND_L_MOTTBL_MOTION = 0x37,
MOTHEAD_DATA_SET_MOUTH_MOTTBL_MOTION = 0x38,
MOTHEAD_DATA_SET_EYES_MOTTBL_MOTION = 0x39,
MOTHEAD_DATA_SET_EYELID_MOTTBL_MOTION = 0x3A,
MOTHEAD_DATA_SET_ROB_CHARA_HEAD_OBJECT = 0x3B,
MOTHEAD_DATA_TYPE_60 = 0x3C,
MOTHEAD_DATA_SET_EYELID_MOTION_FROM_FACE = 0x3D,
MOTHEAD_DATA_ROB_PARTS_ADJUST = 0x3E,
MOTHEAD_DATA_TYPE_63 = 0x3F,
MOTHEAD_DATA_WIND_RESET = 0x40,
MOTHEAD_DATA_OSAGE_RESET = 0x41,
MOTHEAD_DATA_OSAGE_STEP = 0x42,
MOTHEAD_DATA_SLEEVE_ADJUST = 0x43,
MOTHEAD_DATA_TYPE_68 = 0x44,
MOTHEAD_DATA_TYPE_69 = 0x45,
MOTHEAD_DATA_TYPE_70 = 0x46,
MOTHEAD_DATA_OSAGE_MOVE_CANCEL = 0x47,
MOTHEAD_DATA_TYPE_72 = 0x48,
MOTHEAD_DATA_ROB_HAND_ADJUST = 0x49,
MOTHEAD_DATA_DISABLE_COLLISION = 0x4A,
MOTHEAD_DATA_ROB_ADJUST_GLOBAL = 0x4B,
MOTHEAD_DATA_ROB_ARM_ADJUST = 0x4C,
MOTHEAD_DATA_DISABLE_EYE_MOTION = 0x4D,
MOTHEAD_DATA_TYPE_78 = 0x4E,
MOTHEAD_DATA_ROB_CHARA_COLI_RING = 0x4F,
MOTHEAD_DATA_ADJUST_GET_GLOBAL_TRANS = 0x50,
MOTHEAD_DATA_MAX = 0x51,
MOTHEAD_DATA_ROB_PARTS_ADJUST = 0x3E,
MOTHEAD_DATA_TYPE_63 = 0x3F,
MOTHEAD_DATA_WIND_RESET = 0x40,
MOTHEAD_DATA_OSAGE_RESET = 0x41,
MOTHEAD_DATA_OSAGE_STEP = 0x42,
MOTHEAD_DATA_SLEEVE_ADJUST = 0x43,
MOTHEAD_DATA_TYPE_68 = 0x44,
MOTHEAD_DATA_TYPE_69 = 0x45,
MOTHEAD_DATA_TYPE_70 = 0x46,
MOTHEAD_DATA_OSAGE_MOVE_CANCEL = 0x47,
MOTHEAD_DATA_TYPE_72 = 0x48,
MOTHEAD_DATA_ROB_HAND_ADJUST = 0x49,
MOTHEAD_DATA_DISABLE_COLLISION = 0x4A,
MOTHEAD_DATA_ROB_ADJUST_GLOBAL = 0x4B,
MOTHEAD_DATA_ROB_ARM_ADJUST = 0x4C,
MOTHEAD_DATA_DISABLE_EYE_MOTION = 0x4D,
MOTHEAD_DATA_TYPE_78 = 0x4E,
MOTHEAD_DATA_ROB_CHARA_COLI_RING = 0x4F,
MOTHEAD_DATA_ADJUST_GET_GLOBAL_POSITION = 0x50,
MOTHEAD_DATA_MAX = 0x51,
};
enum MotionBlendType {
MOTION_BLEND_NONE = -1,
MOTION_BLEND = 0x00,
MOTION_BLEND_FREEZE = 0x01,
MOTION_BLEND_CROSS = 0x02,
MOTION_BLEND_NONE = -1,
MOTION_BLEND = 0x00,
MOTION_BLEND_FREEZE = 0x01,
MOTION_BLEND_CROSS = 0x02,
MOTION_BLEND_COMBINE = 0x03,
};
@@ -948,8 +948,8 @@ struct skin_param_osage_node {
static_assert(sizeof(skin_param_osage_node) == 0x1C, "\"skin_param_osage_node\" struct should have a size of 0x1C");
struct RobOsageNodeResetData {
vec3 trans;
vec3 trans_diff;
vec3 pos;
vec3 delta_pos;
vec3 rotation;
float_t length;
};
@@ -1002,19 +1002,19 @@ static_assert(sizeof(opd_node_data_pair) == 0x20, "\"opd_node_data_pair\" struct
struct RobOsageNode {
float_t length;
vec3 trans;
vec3 trans_orig;
vec3 trans_diff;
vec3 field_28;
vec3 pos;
vec3 fixed_pos;
vec3 delta_pos;
vec3 vel;
float_t child_length;
bone_node* bone_node_ptr;
mat4* bone_node_mat;
mat4 mat;
RobOsageNode* sibling_node;
float_t max_distance;
vec3 field_94;
vec3 rel_pos;
RobOsageNodeResetData reset_data;
float_t field_C8;
float_t hit;
float_t friction;
vec3 external_force;
float_t force;
@@ -1139,16 +1139,16 @@ struct skin_param_file_data;
struct CLOTHNode {
uint32_t flags;
vec3 trans;
vec3 trans_orig;
vec3 field_1C;
vec3 trans_diff;
vec3 pos;
vec3 fixed_pos;
vec3 prev_pos;
vec3 delta_pos;
vec3 normal;
vec3 tangent;
vec3 binormal;
float_t tangent_sign;
vec2 texcoord;
vec3 field_64;
vec3 direction;
float_t dist_up;
float_t dist_down;
float_t dist_right;
@@ -1188,7 +1188,7 @@ struct CLOTH {
};
struct RobClothRoot {
vec3 trans;
vec3 pos;
vec3 normal;
vec4 tangent;
bone_node* node[4];
@@ -1681,8 +1681,8 @@ struct rob_chara_adjust_data {
bool offset_x;
bool offset_y;
bool offset_z;
bool get_global_trans;
vec3 trans;
bool get_global_position;
vec3 pos;
mat4 mat;
float_t left_hand_scale;
float_t right_hand_scale;