diff --git a/src/CRE/auth_3d.cpp b/src/CRE/auth_3d.cpp index 4ac8ccb1..0ffcc205 100644 --- a/src/CRE/auth_3d.cpp +++ b/src/CRE/auth_3d.cpp @@ -4761,9 +4761,10 @@ static void auth_3d_m_object_hrc_disp(auth_3d_m_object_hrc* moh, auth_3d* auth, mat4 mat = i.model_transform.mat; mat4_mul(&mat, m, &mat); - vec3 pos = *(vec3*)&mat.row3; + vec3 pos; + mat4_get_translation(&mat, &pos); pos.y -= 0.2f; - shad->field_1D0[shadow_type].push_back(pos); + shad->positions[shadow_type].push_back(pos); } if (i.mats.size()) @@ -6604,7 +6605,7 @@ static void auth_3d_object_hrc_disp(auth_3d_object_hrc* oh, auth_3d* auth, rende vec3 pos; mat4_get_translation(&mat, &pos); pos.y -= 0.2f; - shad->field_1D0[SHADOW_STAGE].push_back(pos); + shad->positions[SHADOW_STAGE].push_back(pos); } } diff --git a/src/CRE/render_context.cpp b/src/CRE/render_context.cpp index 6593f602..e592ac27 100644 --- a/src/CRE/render_context.cpp +++ b/src/CRE/render_context.cpp @@ -58,8 +58,7 @@ global_material_struct::global_material_struct() { refract_uv_scale = 0.1f; } -draw_state::render_data::render_data() : self_shadow(), shadow(), -blend(), cull_front(), field_8(), curr_obj_sub_mesh_args() { +draw_state::render_data::render_data() : self_shadow(), shadow(), blend(), cull_front(), field_8() { shader_index = -1; } diff --git a/src/CRE/render_manager.cpp b/src/CRE/render_manager.cpp index 60f7ac09..a6a7d012 100644 --- a/src/CRE/render_manager.cpp +++ b/src/CRE/render_manager.cpp @@ -480,9 +480,9 @@ namespace rndr { Shadow* shad = shadow_ptr; if (shadow && v3) { - int32_t v11[2]; - v11[0] = shad->field_200[0]; - v11[1] = shad->field_200[1]; + int32_t index[2]; + index[0] = shad->index[0]; + index[1] = shad->index[1]; shad->curr_render_textures[0] = &shad->render_textures[0]; shad->curr_render_textures[1] = &shad->render_textures[1]; shad->curr_render_textures[2] = &shad->render_textures[2]; @@ -492,17 +492,17 @@ namespace rndr { if (!v10[i]) continue; - draw_pass_shadow_begin_make_shadowmap(shad, rend_data_ctx, cam, v11[i], j); + draw_pass_shadow_begin_make_shadowmap(shad, rend_data_ctx, cam, index[i], j); rend_data_ctx.set_batch_scene_camera(cam); - rctx->disp_manager->draw(rend_data_ctx, (mdl::ObjType)(mdl::OBJ_TYPE_SHADOW_CHARA + v11[i]), cam); - if (rctx->disp_manager->get_obj_count((mdl::ObjType)(mdl::OBJ_TYPE_SHADOW_OBJECT_CHARA + v11[i])) > 0) { + rctx->disp_manager->draw(rend_data_ctx, (mdl::ObjType)(mdl::OBJ_TYPE_SHADOW_CHARA + index[i]), cam); + if (rctx->disp_manager->get_obj_count((mdl::ObjType)(mdl::OBJ_TYPE_SHADOW_OBJECT_CHARA + index[i])) > 0) { rend_data_ctx.state.set_color_mask(show_stage_shadow ? GL_TRUE : GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); rctx->disp_manager->draw(rend_data_ctx, (mdl::ObjType)(mdl::OBJ_TYPE_SHADOW_OBJECT_CHARA + i), cam); rend_data_ctx.state.set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); } - draw_pass_shadow_end_make_shadowmap(shad, rend_data_ctx, v11[i], j); + draw_pass_shadow_end_make_shadowmap(shad, rend_data_ctx, index[i], j); j++; } } @@ -1414,7 +1414,7 @@ static void draw_pass_shadow_end_make_shadowmap(Shadow* shad, if (a3 == shad->num_shadow - 1) { draw_pass_shadow_filter(rend_data_ctx, &shad->render_textures[3], &shad->render_textures[4], shad->curr_render_textures[0], - shad->field_2DC, shad->field_2E0 / (shad->field_208 * 2.0f), false); + shad->field_2DC, shad->field_2E0 / (shad->z_half_range * 2.0f), false); draw_pass_shadow_esm_filter(rend_data_ctx, &shad->render_textures[5], &shad->render_textures[6], &shad->render_textures[3]); } @@ -1807,7 +1807,7 @@ static void draw_pass_3d_shadow_set(render_data_context& rend_data_ctx, Shadow* rend_data_ctx.state.active_bind_texture_2d(19, shad->render_textures[3].GetColorTex()); rend_data_ctx.state.active_bind_texture_2d(20, shad->render_textures[5].GetColorTex()); rend_data_ctx.state.active_texture(0); - esm_param = (shad->field_2D8 * shad->field_208 * 2.0f) * 1.442695f; + esm_param = (shad->field_2D8 * shad->z_half_range * 2.0f) * 1.442695f; rend_data_ctx.set_self_shadow(true); } else { diff --git a/src/CRE/rob/rob.cpp b/src/CRE/rob/rob.cpp index 9efddd7b..685623a7 100644 --- a/src/CRE/rob/rob.cpp +++ b/src/CRE/rob/rob.cpp @@ -14087,7 +14087,7 @@ void rob_chara_item_equip::disp(int32_t chara_id, render_context* rctx) { if (field_A0 & 0x04) { vec3 pos = position; pos.y -= 0.2f; - shadow_ptr_get()->field_1D0[shadow_type].push_back(pos); + shadow_ptr_get()->positions[shadow_type].push_back(pos); float_t v9; if (sub_140512F60(this) <= -0.2f) diff --git a/src/CRE/shadow.cpp b/src/CRE/shadow.cpp index e94daead..ce696b21 100644 --- a/src/CRE/shadow.cpp +++ b/src/CRE/shadow.cpp @@ -21,7 +21,7 @@ static void sub_1405E6910(Shadow* shad); static void sub_1405E6B70(Shadow* shad); Shadow::Shadow() : curr_render_textures(), shadow_range(), shadow_range_factor(), field_1C0(), field_1C8(), -field_200(), field_208(), near_blur(), blur_filter(), far_blur(), field_2BC(), distance(), field_2C4(), +index(), z_half_range(), near_blur(), blur_filter(), far_blur(), field_2BC(), distance(), field_2C4(), z_near(), z_far(), field_2D0(), field_2D4(), field_2D8(), field_2DC(), field_2E0(), shadow_ambient(), show_texture(), num_shadow(), shadow_enable(), self_shadow(), blur_filter_enable(), separate() { reset(); @@ -150,7 +150,7 @@ void Shadow::reset() { view_point[i] = 1.0f; field_1C0[i] = 0.0f; field_1C8[i] = 0.0f; - field_200[i] = i; + index[i] = i; } for (RenderTexture*& i : curr_render_textures) @@ -177,7 +177,7 @@ void Shadow::reset() { show_texture = false; self_shadow = true; separate = false; - field_208 = (z_far - z_near) * 0.5f; + z_half_range = (z_far - z_near) * 0.5f; } void Shadow::set_distance(float_t value) { @@ -204,33 +204,33 @@ void shadow_ptr_free() { static void sub_1405E60E0(Shadow* shad) { for (int32_t i = 0; i < 2; i++) { - shad->field_1A8[i] = 0.0f; + shad->position[i] = 0.0f; shad->field_1C8[i] = 0.0f; - if (!shad->shadow_enable[i] || !shad->field_1D0[i].size()) + if (!shad->shadow_enable[i] || !shad->positions[i].size()) continue; - vec3 v7 = 0.0f; - for (vec3& j : shad->field_1D0[i]) - v7 += j; + vec3 position = 0.0f; + for (vec3& j : shad->positions[i]) + position += j; - float_t v14 = (float_t)(int64_t)shad->field_1D0[i].size(); - if (v14 < 0.0f) - v14 += (float_t)UINT64_MAX; - v7 *= 1.0f / v14; + float_t position_count = (float_t)(int64_t)shad->positions[i].size(); + if (position_count < 0.0f) + position_count += (float_t)UINT64_MAX; + position *= 1.0f / position_count; float_t v15 = 0.0f; - for (vec3& j : shad->field_1D0[i]) { - vec3 v22 = v7 - j; - vec3 v23 = vec3::dot(v22, shad->direction); - float_t v24 = vec3::distance(shad->direction * v23, v22); + for (vec3& j : shad->positions[i]) { + vec3 position_diff = position - j; + float_t v23 = vec3::dot(position_diff, shad->direction); + float_t v24 = vec3::distance(shad->direction * v23, position_diff); v15 = max_def(v15, max_def(v24 - 0.25f, 0.0f)); } - shad->field_1A8[i] = v7; + shad->position[i] = position; shad->field_1C8[i] = v15; } - for (std::vector& i : shad->field_1D0) + for (std::vector& i : shad->positions) i.clear(); } @@ -244,12 +244,12 @@ static void sub_1405E63D0(Shadow* shad) { if (!shad->shadow_enable[i]) continue; - const vec3 v11 = shad->field_1A8[i] - shad->direction * shad->field_208; + const vec3 v11 = shad->position[i] - shad->direction * shad->z_half_range; const float_t v9 = vec3::distance(shad->view_point[i], v11); - const float_t v12 = vec3::distance(shad->interest[i], shad->field_1A8[i]); + const float_t v12 = vec3::distance(shad->interest[i], shad->position[i]); if (v9 > 0.1f || v12 > 0.1f) { shad->view_point[i] = v11; - shad->interest[i] = shad->field_1A8[i]; + shad->interest[i] = shad->position[i]; } view_point += shad->view_point[i]; @@ -264,9 +264,9 @@ static void sub_1405E6840(Shadow* shad) { int32_t count = 0; shad->num_shadow = 0; for (int32_t i = 0; i < 2; i++) { - if (shad->shadow_enable[i] && shad->field_1D0[i].size()) { + if (shad->shadow_enable[i] && shad->positions[i].size()) { ++shad->num_shadow; - count += (int32_t)shad->field_1D0->size(); + count += (int32_t)shad->positions->size(); } else shad->shadow_enable[i] = false; @@ -285,14 +285,14 @@ static void sub_1405E6910(Shadow* shad) { const float_t v2 = max_def(shad->field_1C8[0], shad->field_1C8[1]); shad->separate = false; shad->shadow_range = v2 + MIN_SHADOW_RANGE; - shad->field_200[0] = 0; - shad->field_200[1] = 1; + shad->index[0] = 0; + shad->index[1] = 1; if (shad->num_shadow < 2) return; - const vec3 v12 = shad->field_1A8[0] - shad->interest_shared; - const vec3 v14 = shad->field_1A8[1] - shad->interest_shared; + const vec3 v12 = shad->position[0] - shad->interest_shared; + const vec3 v14 = shad->position[1] - shad->interest_shared; float_t v16 = vec3::distance((shad->direction * vec3::dot(v12, shad->direction)), v12); v16 = max_def(v16 - 0.25f, 0.0f); @@ -304,8 +304,8 @@ static void sub_1405E6910(Shadow* shad) { shad->shadow_range = v2 + MIN_SHADOW_RANGE + v16; if (vec3::dot(v12, shad->direction) < vec3::dot(v14, shad->direction)) { - shad->field_200[0] = 1; - shad->field_200[1] = 0; + shad->index[0] = 1; + shad->index[1] = 0; } } @@ -324,29 +324,29 @@ static void sub_1405E6B70(Shadow* shad) { } for (int32_t i = 0; i < 2; i++) { - shad->field_1A8[i] = 0.0f; + shad->position[i] = 0.0f; shad->field_1C8[i] = 0.0f; - if (!shad->shadow_enable[i] || !shad->field_1D0[i].size()) + if (!shad->shadow_enable[i] || !shad->positions[i].size()) continue; vec3 v22 = 0.0f; - for (vec3& j : shad->field_1D0[i]) + for (vec3& j : shad->positions[i]) v22 += j; - float_t v29 = (float_t)(int64_t)shad->field_1D0[i].size(); + float_t v29 = (float_t)(int64_t)shad->positions[i].size(); if (v29 < 0.0f) v29 += (float_t)UINT64_MAX; v22 *= 1.0f / v29; float_t v30 = 0.0f; - for (vec3& j : shad->field_1D0[i]) { + for (vec3& j : shad->positions[i]) { const vec3 v35 = v22 - j; const float_t v39 = fabsf(vec3::dot(v35, v86)); const float_t v38 = fabsf(vec3::dot(v35, v3)); v30 = max_def(v30, max_def(v38, v39)); } - shad->field_1A8[i] = v22; + shad->position[i] = v22; shad->field_1C8[i] = v30; } @@ -357,12 +357,12 @@ static void sub_1405E6B70(Shadow* shad) { if (!shad->shadow_enable[i]) continue; - const vec3 v41 = shad->field_1A8[0] - shad->direction * shad->field_208; + const vec3 v41 = shad->position[0] - shad->direction * shad->z_half_range; const float_t v42 = vec3::distance(shad->view_point[0], v41); - const float_t v45 = vec3::distance(shad->interest[0], shad->field_1A8[0]); + const float_t v45 = vec3::distance(shad->interest[0], shad->position[0]); if (v42 > 0.1f || v45 > 0.1f) { shad->view_point[0] = v41; - shad->interest[0] = shad->field_1A8[0]; + shad->interest[0] = shad->position[0]; } view_point += shad->view_point[i]; @@ -376,8 +376,8 @@ static void sub_1405E6B70(Shadow* shad) { const float_t v67 = max_def(shad->field_1C8[0], shad->field_1C8[1]); shad->separate = 0; shad->shadow_range = v67 + MIN_SHADOW_RANGE; - shad->field_200[0] = 0; - shad->field_200[1] = 1; + shad->index[0] = 0; + shad->index[1] = 1; if (shad->num_shadow >= 2) { float_t v2 = 0.0f; @@ -388,16 +388,16 @@ static void sub_1405E6B70(Shadow* shad) { if (!shad->shadow_enable[i]) continue; - for (vec3& j : shad->field_1D0[i]) { - const vec3 v74 = j - shad->interest_shared; + for (vec3& j : shad->positions[i]) { + const vec3 interest_diff = j - shad->interest_shared; - const float_t v77 = vec3::dot(v86, v74); + const float_t v77 = vec3::dot(v86, interest_diff); if (v2 > v77) v2 = v77; else if (v69 < v77) v69 = v77; - const float_t v78 = vec3::dot(v3, v74); + const float_t v78 = vec3::dot(v3, interest_diff); if (v68 > v78) v68 = v78; else if (v70 < v78) @@ -414,13 +414,13 @@ static void sub_1405E6B70(Shadow* shad) { else shad->shadow_range = v79 + MIN_SHADOW_RANGE; - if (vec3::dot(shad->field_1A8[0] - shad->interest_shared, shad->direction) - < vec3::dot(shad->field_1A8[1] - shad->interest_shared, shad->direction)) { - shad->field_200[1] = 0; - shad->field_200[0] = 1; + if (vec3::dot(shad->position[0] - shad->interest_shared, shad->direction) + < vec3::dot(shad->position[1] - shad->interest_shared, shad->direction)) { + shad->index[1] = 0; + shad->index[0] = 1; } } - for (std::vector& i : shad->field_1D0) + for (std::vector& i : shad->positions) i.clear(); } diff --git a/src/CRE/shadow.hpp b/src/CRE/shadow.hpp index bd1cf5e5..62eac386 100644 --- a/src/CRE/shadow.hpp +++ b/src/CRE/shadow.hpp @@ -25,12 +25,12 @@ struct Shadow { float_t shadow_range_factor; vec3 view_point[2]; vec3 interest[2]; - vec3 field_1A8[2]; + vec3 position[2]; float_t field_1C0[2]; float_t field_1C8[2]; - std::vector field_1D0[2]; - int32_t field_200[2]; - float_t field_208; + std::vector positions[2]; + int32_t index[2]; + float_t z_half_range; vec3 direction; vec3 view_point_shared; vec3 interest_shared; diff --git a/src/ReDIVA/data_test/object_test.cpp b/src/ReDIVA/data_test/object_test.cpp index 8c0abe82..2c54e486 100644 --- a/src/ReDIVA/data_test/object_test.cpp +++ b/src/ReDIVA/data_test/object_test.cpp @@ -311,7 +311,7 @@ void DataTestObjectManager::disp() { mat4_rotate_xyz(&rotation, &mat); vec3 pos = 0.0f; - shadow_ptr_get()->field_1D0[SHADOW_CHARA].push_back(pos); + shadow_ptr_get()->positions[SHADOW_CHARA].push_back(pos); rctx_ptr->disp_manager->set_shadow_type(SHADOW_CHARA); rctx_ptr->disp_manager->entry_obj_by_object_info(mat, { obj_id, obj_set_id });