diff --git a/src/DivaGL/render_manager.cpp b/src/DivaGL/render_manager.cpp index fdd167d..f3da68e 100644 --- a/src/DivaGL/render_manager.cpp +++ b/src/DivaGL/render_manager.cpp @@ -1118,19 +1118,17 @@ static void draw_pass_shadow_begin_make_shadowmap(Shadow* shad, int32_t index, i glClearDLL(GL_COLOR_BUFFER_BIT); glScissorDLL(1, 1, tex->width - 2, tex->height - 2); - float_t offset = 0.0f; - float_t range = shad->view_region * shad->range; + float_t range = shad->get_range(); + float_t offset; vec3* interest; vec3* view_point; if (shad->field_2F5) { - offset = -0.5f; - if (index) - offset = 0.5f; - + offset = index ? 0.5f : -0.5f; interest = &shad->interest[index]; view_point = &shad->view_point[index]; } else { + offset = 0.0f; interest = &shad->interest_shared; view_point = &shad->view_point_shared; } @@ -1623,18 +1621,19 @@ static void draw_pass_3d_shadow_set(Shadow* shad) { draw_state->light = true; uniform->arr[U_LIGHT_1] = shad->field_2EC > 1 ? 1 : 0; - float_t range = shad->view_region * shad->range; + float_t range = shad->get_range(); for (int32_t i = 0; i < 2; i++) { - float_t v6 = 0.0f; + float_t offset; vec3* interest; vec3* view_point; if (shad->field_2F5) { - v6 = i ? 0.5f : -0.5f; + offset = i ? 0.5f : -0.5f; interest = &shad->interest[i]; view_point = &shad->view_point[i]; } else { + offset = 0.0f; interest = &shad->interest_shared; view_point = &shad->view_point_shared; } @@ -1642,7 +1641,7 @@ static void draw_pass_3d_shadow_set(Shadow* shad) { mat4 temp; mat4_translate(0.5f, 0.5f, 0.5f, &temp); mat4_scale_rot(&temp, 0.5f, 0.5f, 0.5f, &temp); - mat4_mul_translate(&temp, v6, 0.0f, 0.0f, &temp); + mat4_mul_translate(&temp, offset, 0.0f, 0.0f, &temp); mat4 proj; mat4_ortho(-range, range, -range, range, shad->z_near, shad->z_far, &proj); diff --git a/src/DivaGL/shadow.cpp b/src/DivaGL/shadow.cpp index 7b7f738..c1ea1dc 100644 --- a/src/DivaGL/shadow.cpp +++ b/src/DivaGL/shadow.cpp @@ -10,6 +10,10 @@ Shadow** shadow_ptr = (Shadow**)0x000000014CC587B8; void(FASTCALL* sub_1405E8A20)(Shadow* shad, int32_t index, vec3* pos) = (void(FASTCALL*)(Shadow* shad, int32_t index, vec3 * pos))0x000000014063FA90; +float_t Shadow::get_range() { + return range * view_region; +} + Shadow* shadow_ptr_get() { return *shadow_ptr; } diff --git a/src/DivaGL/shadow.hpp b/src/DivaGL/shadow.hpp index f982d43..6a01b0b 100644 --- a/src/DivaGL/shadow.hpp +++ b/src/DivaGL/shadow.hpp @@ -56,6 +56,8 @@ struct Shadow { bool self_shadow; bool blur_filter_enable[2]; bool field_2F5; + + float_t get_range(); }; static_assert(sizeof(Shadow) == 0x2F8, "\"Shadow\" struct should have a size of 0x2F8");