Adapted new findings

This commit is contained in:
korenkonder
2024-08-03 08:45:16 +03:00
parent 7cce0d8372
commit 5e83b67648
14 changed files with 70 additions and 57 deletions
+5 -3
View File
@@ -517,8 +517,6 @@ struct struc_8 {
size_t data_size;
bool field_18;
CanonicalProperties CanProp;
bool field_58;
int32_t field_5C;
int32_t field_60;
int32_t field_64;
int64_t field_68;
@@ -981,7 +979,7 @@ HOOK(void, FASTCALL, auth_3d_curve_array_free, 0x00000001401C2E30,
auth_3d_material_list* ml = (auth_3d_material_list*)begin->curve.keys;
auth_3d_rgba__free(&ml->blend_color);
auth_3d_rgba__free(&ml->emission);
delete ml;
_operator_delete(ml);
}
else {
if (((kft3**)&begin->curve.keys_vec)[0]) {
@@ -1290,13 +1288,17 @@ HOOK(bool, FASTCALL, auth_3d_curve_parse, 0x00000001401DA230,
}
void auth_3d_patch() {
// Move both auth_3d_curve's value and type
WRITE_MEMORY_STRING(0x00000001401A3DBE, "\x48\x8B"
"\x43\x60\x48\x83\xC3\x70\x48\x83\xC7\x70\x48\x89\x47\xF8\x48\x8D"
"\x43\xF8\x48\x3B\xC6\x75\x8B\x48\x8B\x5C\x24\x30\x48\x8B\xC7\x48"
"\x8B\x74\x24\x38\x48\x83\xC4\x20\x5F\xC3", 0x2C);
// Null both auth_3d_curve's value and type
WRITE_MEMORY_STRING(0x00000001401A72FF, "\x4C\x89\x40\x38", 0x04);
// Move both auth_3d_curve's value and type
WRITE_MEMORY_STRING(0x00000001401B316A, "\x48\x8B\x43\x68\x48\x89"
"\x47\x68\x48\x8B\xC7\x48\x8B\x5C\x24\x48\x48\x83\xC4\x30\x5F\xC3", 0x16);
// Null both auth_3d's shadow and chara_item
WRITE_MEMORY_STRING(0x00000001401D7A78, "\x44\x89\xBF\x98\x00\x00\x00", 0x07);
INSTALL_HOOK(auth_3d_curve_array_free);
+2 -2
View File
@@ -62,8 +62,8 @@ HOOK(void, FASTCALL, camera_data_update_projection, 0x00000001401F8E90) {
render_get()->calc_projection_matrix(&camera_data->projection, camera_data->fov,
(float_t)camera_data->aspect, camera_data->min_distance, camera_data->max_distance,
camera_data->projection_scale.x, camera_data->projection_scale.y,
camera_data->projection_scale.z, camera_data->projection_scale.w);
camera_data->proj_left_offset, camera_data->proj_right_offset,
camera_data->proj_bottom_offset, camera_data->proj_top_offset);
camera_data->fov_horizontal_rad = tanf(camera_data->fov * 0.5f * DEG_TO_RAD_FLOAT);
}
+4 -1
View File
@@ -19,7 +19,10 @@ struct camera_struct {
double_t aspect;
float_t min_distance;
float_t max_distance;
vec4 projection_scale;
float_t proj_left_offset;
float_t proj_right_offset;
float_t proj_bottom_offset;
float_t proj_top_offset;
bool use_up;
char field_49;
char field_4A;
+2 -2
View File
@@ -14,8 +14,8 @@ CanonicalProperties::~CanonicalProperties() {
}
void CanonicalProperties::Clear() {
key_value_pair_storage.clear();
key_value_pair_storage.shrink_to_fit();
key_value_pair_storage.first.clear();
key_value_pair_storage.first.shrink_to_fit();
data.clear();
data.shrink_to_fit();
}
+2 -2
View File
@@ -10,7 +10,7 @@
struct CanonicalProperties {
prj::string data;
prj::vector_pair_alloc<prj::string_range, prj::string_range> key_value_pair_storage;
prj::pair<prj::vector_pair_alloc<prj::string_range, prj::string_range>, bool> key_value_pair_storage;
CanonicalProperties();
~CanonicalProperties();
@@ -31,4 +31,4 @@ struct CanonicalProperties {
}
};
static_assert(sizeof(CanonicalProperties) == 0x38, "\"CanonicalProperties\" struct should have a size of 0x38");
static_assert(sizeof(CanonicalProperties) == 0x40, "\"CanonicalProperties\" struct should have a size of 0x40");
+27 -17
View File
@@ -28,27 +28,31 @@ popaq MACRO
pop rax
ENDM
EXTERN ?pv_game_load_state_4_tail_impl@@YAX_K@Z : PROC
EXTERN ?pv_game_load_state_4_tail_impl@@YA_NXZ : PROC
EXTERN ?originalpv_game_load_state_4_tail@@3P6AXXZEA : QWORD
EXTERN ?pv_game_load_state_6_head_impl@@YA_NXZ : PROC
EXTERN ?originalpv_game_load_state_6_head@@3P6AXXZEA : QWORD
EXTERN ?pv_game_load_state_9_mid_impl@@YA_NXZ : PROC
EXTERN ?originalpv_game_load_state_9_mid@@3P6AXXZEA : QWORD
EXTERN ?pv_game_load_state_10_head_impl@@YA_NXZ : PROC
EXTERN ?originalpv_game_load_state_10_head@@3P6AXXZEA : QWORD
EXTERN ?pv_game_load_state_13_tail_impl@@YAX_K@Z : PROC
EXTERN ?originalpv_game_load_state_13_tail@@3P6AXXZEA : QWORD
EXTERN ?pv_game_load_state_13_head_impl@@YA_NXZ : PROC
EXTERN ?originalpv_game_load_state_13_head@@3P6AXXZEA : QWORD
.DATA
pv_game_load_state_6_head_jump_false QWORD 00000001401043ECh
pv_game_load_jump_end QWORD 00000001401043ECh
.CODE
?implOfpv_game_load_state_4_tail@@YAXXZ PROC PUBLIC
pushaq
mov rcx, r14
call ?pv_game_load_state_4_tail_impl@@YAX_K@Z
call ?pv_game_load_state_4_tail_impl@@YA_NXZ
test al, al
popaq
jz end_func
jmp pv_game_load_jump_end
end_func:
jmp ?originalpv_game_load_state_4_tail@@3P6AXXZEA
?implOfpv_game_load_state_4_tail@@YAXXZ ENDP
@@ -59,25 +63,31 @@ pv_game_load_state_6_head_jump_false QWORD 00000001401043ECh
test al, al
popaq
jz end_func
jmp pv_game_load_state_6_head_jump_false
jmp pv_game_load_jump_end
end_func:
jmp ?originalpv_game_load_state_6_head@@3P6AXXZEA
?implOfpv_game_load_state_6_head@@YAXXZ ENDP
?implOfpv_game_load_state_9_mid@@YAXXZ PROC PUBLIC
?implOfpv_game_load_state_10_head@@YAXXZ PROC PUBLIC
pushaq
call ?pv_game_load_state_9_mid_impl@@YA_NXZ
call ?pv_game_load_state_10_head_impl@@YA_NXZ
test al, al
popaq
cmovne ebx,r15d
jmp ?originalpv_game_load_state_9_mid@@3P6AXXZEA
?implOfpv_game_load_state_9_mid@@YAXXZ ENDP
jz end_func
jmp pv_game_load_jump_end
end_func:
jmp ?originalpv_game_load_state_10_head@@3P6AXXZEA
?implOfpv_game_load_state_10_head@@YAXXZ ENDP
?implOfpv_game_load_state_13_tail@@YAXXZ PROC PUBLIC
?implOfpv_game_load_state_13_head@@YAXXZ PROC PUBLIC
pushaq
mov rcx, r14
call ?pv_game_load_state_13_tail_impl@@YAX_K@Z
call ?pv_game_load_state_13_head_impl@@YA_NXZ
test al, al
popaq
jmp ?originalpv_game_load_state_13_tail@@3P6AXXZEA
?implOfpv_game_load_state_13_tail@@YAXXZ ENDP
jz end_func
jmp pv_game_load_jump_end
end_func:
jmp ?originalpv_game_load_state_13_head@@3P6AXXZEA
?implOfpv_game_load_state_13_head@@YAXXZ ENDP
END
+2
View File
@@ -6,6 +6,8 @@
#pragma once
#include "../KKdLib/default.hpp"
#include "../KKdLib/image.hpp"
#include "object.hpp"
#include "types.hpp"
enum item_id {
+2 -2
View File
@@ -3204,7 +3204,7 @@ namespace mdl {
texture_color_offset = value;
}
void DispManager::set_texture_pattern(int32_t count, texture_pattern_struct* value) {
void DispManager::set_texture_pattern(int32_t count, const texture_pattern_struct* value) {
if (count > TEXTURE_PATTERN_COUNT)
return;
@@ -3226,7 +3226,7 @@ namespace mdl {
texture_specular_offset = value;
}
void DispManager::set_texture_transform(int32_t count, texture_transform_struct* value) {
void DispManager::set_texture_transform(int32_t count, const texture_transform_struct* value) {
if (count > TEXTURE_TRANSFORM_COUNT)
return;
+2 -2
View File
@@ -508,10 +508,10 @@ namespace mdl {
void set_shadow_type(shadow_type_enum type = SHADOW_CHARA);
void set_texture_color_coefficients(vec4& value);
void set_texture_color_offset(vec4& value);
void set_texture_pattern(int32_t count = 0, texture_pattern_struct* value = 0);
void set_texture_pattern(int32_t count = 0, const texture_pattern_struct* value = 0);
void set_texture_specular_coefficients(vec4& value);
void set_texture_specular_offset(vec4& value);
void set_texture_transform(int32_t count = 0, texture_transform_struct* value = 0);
void set_texture_transform(int32_t count = 0, const texture_transform_struct* value = 0);
void set_wet_param(float_t value = 0.0f);
};
+13 -16
View File
@@ -640,16 +640,14 @@ pv_disp2d& pv_disp2d_data = *(pv_disp2d*)0x0000000140C938E0;
size_t pv_game_ptr = 0x0000000140CDD8D0;
pv_game_parent& pv_game_parent_data = *(pv_game_parent*)0x0000000140D0B510;
void pv_game_load_state_4_tail_impl(size_t pv_game) {
bool pv_game_load_state_4_tail_impl() {
if (task_pv_game_x->use) {
bool wait_load = false;
wait_load |= task_pv_game_x->data.effect.state < 12;
wait_load |= task_pv_game_x->stage_data.state < 11;
if (wait_load)
return;
return true;
}
*(uint32_t*)(pv_game + 0x08) = 5;
return false;
}
bool pv_game_load_state_6_head_impl() {
@@ -661,26 +659,25 @@ bool pv_game_load_state_6_head_impl() {
return false;
}
bool pv_game_load_state_9_mid_impl() {
bool pv_game_load_state_10_head_impl() {
return task_pv_game_x->use ? task_pv_game_x->data.effect.state < 11 : false;
}
void pv_game_load_state_13_tail_impl(size_t pv_game) {
bool pv_game_load_state_13_head_impl() {
if (task_pv_game_x->use) {
bool wait_load = false;
wait_load |= task_pv_game_x->data.effect.state < 12;
wait_load |= task_pv_game_x->stage_data.state < 11;
if (wait_load)
return;
return true;
}
*(uint32_t*)(pv_game + 0x08) = 14;
return false;
}
HOOK(void, FASTCALL, pv_game_load_state_4_tail, 0x00000001400FF55B);
HOOK(void, FASTCALL, pv_game_load_state_6_head, 0x000000001400FF5ED);
HOOK(void, FASTCALL, pv_game_load_state_9_mid, 0x000000014010280D);
HOOK(void, FASTCALL, pv_game_load_state_13_tail, 0x000000014010386E);
HOOK(void, FASTCALL, pv_game_load_state_10_head, 0x000000014010290D);
HOOK(void, FASTCALL, pv_game_load_state_13_head, 0x000000014010356E);
HOOK(int64_t, FASTCALL, pv_game_pv_data__ctrl, 0x00000001401230E0,
size_t _this, float_t delta_time, int64_t curr_time, bool a4) {
@@ -830,8 +827,8 @@ HOOK(bool, FASTCALL, pv_game_pv_data__load, 0x000000014011B7E0, size_t _this,
void pv_game_patch() {
INSTALL_HOOK(pv_game_load_state_4_tail);
INSTALL_HOOK(pv_game_load_state_6_head);
INSTALL_HOOK(pv_game_load_state_9_mid);
INSTALL_HOOK(pv_game_load_state_13_tail);
INSTALL_HOOK(pv_game_load_state_10_head);
INSTALL_HOOK(pv_game_load_state_13_head);
INSTALL_HOOK(pv_game_pv_data__ctrl);
INSTALL_HOOK(task_pv_game_del_task);
INSTALL_HOOK(task_pv_game_add_task);
@@ -3191,8 +3188,8 @@ void x_pv_game_stage::ctrl(float_t delta_time) {
state = 12;
}
case 12: {
//if (env.state && env.state != 20)
// break;
if (env.state && env.state != 20)
break;
bool wait_load = false;
for (int32_t i = 0; i < X_PV_GAME_STAGE_EFFECT_COUNT; i++) {
+7 -7
View File
@@ -285,12 +285,12 @@ namespace rndr {
}
void Render::calc_projection_matrix(mat4* mat, float_t fov, float_t aspect, float_t z_near, float_t z_far,
float_t left_scale, float_t right_scale, float_t bottom_scale, float_t top_scale) {
float_t left_offset, float_t right_offset, float_t bottom_offset, float_t top_offset) {
float_t tan_fov = (float_t)tan(fov * M_PI * (1.0 / 360.0)) * z_near;
float_t left = -tan_fov * aspect + tan_fov * aspect * left_scale;
float_t right = tan_fov * aspect + tan_fov * aspect * right_scale;
float_t bottom = -tan_fov + tan_fov * bottom_scale;
float_t top = tan_fov + tan_fov * top_scale;
float_t left = -tan_fov * aspect + tan_fov * aspect * left_offset;
float_t right = tan_fov * aspect + tan_fov * aspect * right_offset;
float_t bottom = -tan_fov + tan_fov * bottom_offset;
float_t top = tan_fov + tan_fov * top_offset;
if (taa) {
float_t offset = taa_texture_selector == 1 ? -0.25f : 0.25f;
@@ -1140,8 +1140,8 @@ namespace rndr {
}
void Render::apply_mlaa(int32_t destination, int32_t source, int32_t mlaa) {
gl_state_begin_event("PostProcess::mlaa");
if (mlaa) {
gl_state_begin_event("PostProcess::mlaa");
mlaa_buffer.Bind();
gl_state_active_bind_texture_2d(0, taa_tex[source]->glid);
gl_state_bind_sampler(0, rctx->render_samplers[1]);
@@ -1177,7 +1177,6 @@ namespace rndr {
uniform->arr[U_ALPHA_MASK] = 0;
gl_state_active_bind_texture_2d(0, 0);
gl_state_active_bind_texture_2d(1, 0);
gl_state_end_event();
}
else {
taa_buffer[destination].Bind();
@@ -1189,6 +1188,7 @@ namespace rndr {
render_post_width_scale, render_post_height_scale,
0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f);
}
gl_state_end_event();
}
void Render::apply_tone_map(texture* light_proj_tex, int32_t npr_param) {
+1 -1
View File
@@ -177,7 +177,7 @@ namespace rndr {
void bind_render_texture(bool aet_back = false);
void calc_exposure_chara_data();
void calc_projection_matrix(mat4* mat, float_t fov, float_t aspect, float_t z_near, float_t z_far,
float_t left_scale, float_t right_scale, float_t bottom_scale, float_t top_scale);
float_t left_offset, float_t right_offset, float_t bottom_offset, float_t top_offset);
void ctrl();
void draw_quad(int32_t width, int32_t height, float_t s0, float_t t0, float_t s1, float_t t1,
float_t scale, float_t param_x, float_t param_y, float_t param_z, float_t param_w);
-1
View File
@@ -467,7 +467,6 @@ HOOK(void, FASTCALL, RobCloth__UpdateVertexBuffer, 0x000000014021CF00, obj_mesh*
buffer.UnmapMemory();
}
HOOK(void, FASTCALL, sub_1405044B0, 0x00000001405044B0, rob_chara* rob_chr) {
rob_chara_item_adjust_x& item_adjust = rob_chara_item_adjust_x_array[rob_chr->chara_id];
rob_chara_arm_adjust_x& arm_adjust = rob_chara_arm_adjust_x_array[rob_chr->chara_id];
+1 -1
View File
@@ -286,7 +286,7 @@ extern size_t(FASTCALL* sprite_manager_get_reqlist_count)(int32_t index);
extern void (FASTCALL* sprite_manager_read_file)(int32_t set_id, const prj::string mdata_dir);
extern bool (FASTCALL* sprite_manager_load_file)(int32_t set_id);
extern const spr_db_spr* sprite_database_get_spr_by_id(int32_t id);
extern const spr_db_spr* sprite_database_get_spr_by_id(int32_t id);
extern int32_t sprite_database_get_spr_set_id_by_name(const prj::string& name);
extern void sprite_manager_init();