Adapted new findings
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
|
||||
@@ -6,6 +6,8 @@
|
||||
#pragma once
|
||||
|
||||
#include "../KKdLib/default.hpp"
|
||||
#include "../KKdLib/image.hpp"
|
||||
#include "object.hpp"
|
||||
#include "types.hpp"
|
||||
|
||||
enum item_id {
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
|
||||
@@ -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++) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user