From ec2b6934cfb6ea818b005fd181a06fb4aae45610 Mon Sep 17 00:00:00 2001 From: korenkonder Date: Sun, 28 Jun 2026 01:45:27 +0300 Subject: [PATCH] Fixed searching of entries in DBs by name --- src/CRE/auth_2d.cpp | 8 ---- src/CRE/auth_2d.hpp | 1 - src/CRE/auth_3d.cpp | 3 +- src/CRE/render_manager.cpp | 12 ++--- src/KKdLib/database/auth_3d.cpp | 18 ++++++-- src/KKdLib/database/bone.cpp | 78 +++++++++++++++++++++++++++------ src/KKdLib/database/motion.cpp | 36 ++++++++++++--- src/KKdLib/database/object.cpp | 24 ++++++++-- src/KKdLib/database/stage.cpp | 6 ++- src/KKdLib/database/texture.cpp | 6 ++- src/ReDIVA/pv_game/pv_game.cpp | 4 +- 11 files changed, 150 insertions(+), 46 deletions(-) diff --git a/src/CRE/auth_2d.cpp b/src/CRE/auth_2d.cpp index c9bf73c5..e57d1d57 100644 --- a/src/CRE/auth_2d.cpp +++ b/src/CRE/auth_2d.cpp @@ -260,14 +260,6 @@ namespace aet { return *this; } - // Missing - void IdHandle::restart() { - if (isValid() && getReady()) { - remove(); - M_put(); - } - } - // 0x1401E5F10 void IdHandle::put() { remove(); diff --git a/src/CRE/auth_2d.hpp b/src/CRE/auth_2d.hpp index 1a7a3d31..bc6f597d 100644 --- a/src/CRE/auth_2d.hpp +++ b/src/CRE/auth_2d.hpp @@ -93,7 +93,6 @@ namespace aet { } IdHandle& assign(const AetArgs& in_args); - void restart(); void put(); void put_valid(); void destroy(); diff --git a/src/CRE/auth_3d.cpp b/src/CRE/auth_3d.cpp index 7607fb20..b8df3ab1 100644 --- a/src/CRE/auth_3d.cpp +++ b/src/CRE/auth_3d.cpp @@ -1741,7 +1741,8 @@ namespace auth_3d_detail { void EventA2d::entry(const Scene& in_scene, EventActionFlag in_eaf, render_context* rctx) { float_t frame = in_scene.get_frame(); if (frame >= begin && frame < end) - M_a2d_handle.restart(); + if (M_a2d_handle.isValid() && M_a2d_handle.getReady()) + M_a2d_handle.put(); } // 0x1401D3890 diff --git a/src/CRE/render_manager.cpp b/src/CRE/render_manager.cpp index 80241690..b9822ced 100644 --- a/src/CRE/render_manager.cpp +++ b/src/CRE/render_manager.cpp @@ -59,8 +59,8 @@ static void draw_pass_reflect_full(render_data_context& rend_data_ctx, rndr::Ren void apply_blur_filter_sub(render_data_context& rend_data_ctx, RenderTexture* dst, RenderTexture* src, ImgfBoxSampl filter, const vec2 res_scale, const vec4 scale, const vec4 offset); -static void rndpass_create_render_texture(int32_t multisample); -static void rndpass_free_render_texture(); +static void rndpass_create_texture(int32_t multisample); +static void rndpass_free_texture(); static void set_reflect_mat(render_data_context& rend_data_ctx, cam_data& cam); @@ -1337,7 +1337,7 @@ void rndpass_init(int32_t anti_alias, int32_t min_render, int32_t ss_alpha_mask, render_screen_param.yoffset, render_screen_param.width, render_screen_param.height); render_manager.width = screen_param.width; render_manager.height = screen_param.height; - rndpass_create_render_texture(1); + rndpass_create_texture(1); render_manager.render->create_other(); init_shadow(); @@ -1352,7 +1352,7 @@ void rndpass_init(int32_t anti_alias, int32_t min_render, int32_t ss_alpha_mask, void rndpass_finish() { rndr::RenderManager& render_manager = *rctx_ptr->render_manager; - rndpass_free_render_texture(); + rndpass_free_texture(); render_manager.render->destroy(); finish_shadow(); rctx_ptr->sss_data->free(); @@ -1865,7 +1865,7 @@ void apply_blur_filter_sub(render_data_context& rend_data_ctx, RenderTexture* ds } // 0x140502560 -static void rndpass_create_render_texture(int32_t multisample) { +static void rndpass_create_texture(int32_t multisample) { rndr::RenderManager& render_manager = *rctx_ptr->render_manager; #ifdef USE_OPENGL @@ -1909,7 +1909,7 @@ static void rndpass_create_render_texture(int32_t multisample) { } // 0x1405027A0 -static void rndpass_free_render_texture() { +static void rndpass_free_texture() { rndr::RenderManager& render_manager = *rctx_ptr->render_manager; #ifdef USE_OPENGL diff --git a/src/KKdLib/database/auth_3d.cpp b/src/KKdLib/database/auth_3d.cpp index 7c92af88..d902d3ed 100644 --- a/src/KKdLib/database/auth_3d.cpp +++ b/src/KKdLib/database/auth_3d.cpp @@ -202,7 +202,11 @@ void auth_3d_database::update() { } int32_t auth_3d_database::get_category_index(const char* name) const { - auto elem = category_names.find(hash_utf8_murmurhash(name)); + uint32_t name_hash = hash_utf8_murmurhash(name); + if (name_hash == hash_murmurhash_empty) + return -1; + + auto elem = category_names.find(name_hash); if (elem != category_names.end()) return (int32_t)(elem->second - category.data()); return -1; @@ -211,7 +215,11 @@ int32_t auth_3d_database::get_category_index(const char* name) const { void auth_3d_database::get_category_uids(const char* name, std::vector& uid) const { uid.clear(); - auto elem = category_names.find(hash_utf8_murmurhash(name)); + uint32_t name_hash = hash_utf8_murmurhash(name); + if (name_hash == hash_murmurhash_empty) + return; + + auto elem = category_names.find(name_hash); if (elem != category_names.end()) { uid.assign(elem->second->uid.begin(), elem->second->uid.end()); return; @@ -219,7 +227,11 @@ void auth_3d_database::get_category_uids(const char* name, std::vector& } int32_t auth_3d_database::get_uid(const char* name) const { - auto elem = uid_names.find(hash_utf8_murmurhash(name)); + uint32_t name_hash = hash_utf8_murmurhash(name); + if (name_hash == hash_murmurhash_empty) + return -1; + + auto elem = uid_names.find(name_hash); if (elem != uid_names.end()) return (int32_t)(elem->second - uid.data()); return -1; diff --git a/src/KKdLib/database/bone.cpp b/src/KKdLib/database/bone.cpp index aa3a68b0..75669eb1 100644 --- a/src/KKdLib/database/bone.cpp +++ b/src/KKdLib/database/bone.cpp @@ -273,7 +273,11 @@ const BoneData* bone_database::get_bone_data(const char* kind_name) const { if (!kind_name) return 0; - auto elem = bonedata_map.find(hash_utf8_murmurhash(kind_name)); + uint32_t kind_name_hash = hash_utf8_murmurhash(kind_name); + if (kind_name_hash == hash_murmurhash_empty) + return 0; + + auto elem = bonedata_map.find(kind_name_hash); if (elem != bonedata_map.end()) return elem->second; return 0; @@ -283,10 +287,18 @@ int32_t bone_database::get_block_index(const char* kind_name, const char* name) if (!kind_name || !name) return -1; - auto elem = bonedata_map.find(hash_utf8_murmurhash(kind_name)); + uint32_t kind_name_hash = hash_utf8_murmurhash(kind_name); + if (kind_name_hash == hash_murmurhash_empty) + return - 1; + + auto elem = bonedata_map.find(kind_name_hash); if (elem != bonedata_map.end()) { + uint32_t name_hash = hash_utf8_murmurhash(name); + if (name_hash == hash_murmurhash_empty) + return -1; + const BoneData* skel = elem->second; - auto elem = skel->body_type_map.find(hash_utf8_murmurhash(name)); + auto elem = skel->body_type_map.find(name_hash); if (elem != skel->body_type_map.end()) return (int32_t)(elem->second - skel->body_type.data()); } @@ -297,7 +309,11 @@ const std::vector* bone_database::get_body_type_table(const char* kind if (!kind_name) return 0; - auto elem = bonedata_map.find(hash_utf8_murmurhash(kind_name)); + uint32_t kind_name_hash = hash_utf8_murmurhash(kind_name); + if (kind_name_hash == hash_murmurhash_empty) + return 0; + + auto elem = bonedata_map.find(kind_name_hash); if (elem != bonedata_map.end()) return &elem->second->body_type; return 0; @@ -307,7 +323,11 @@ const std::vector* bone_database::get_joint_table(const char* ki if (!kind_name) return 0; - auto elem = bonedata_map.find(hash_utf8_murmurhash(kind_name)); + uint32_t kind_name_hash = hash_utf8_murmurhash(kind_name); + if (kind_name_hash == hash_murmurhash_empty) + return 0; + + auto elem = bonedata_map.find(kind_name_hash); if (elem != bonedata_map.end()) return &elem->second->chain_pos_rad; return 0; @@ -317,10 +337,18 @@ int32_t bone_database::get_bone_index(const char* kind_name, const char* name) c if (!kind_name || !name) return -1; - auto elem = bonedata_map.find(hash_utf8_murmurhash(kind_name)); + uint32_t kind_name_hash = hash_utf8_murmurhash(kind_name); + if (kind_name_hash == hash_murmurhash_empty) + return -1; + + auto elem = bonedata_map.find(kind_name_hash); if (elem != bonedata_map.end()) { + uint32_t name_hash = hash_utf8_murmurhash(name); + if (name_hash == hash_murmurhash_empty) + return -1; + const BoneData* skel = elem->second; - auto elem = skel->bone_name_map.find(hash_utf8_murmurhash(name)); + auto elem = skel->bone_name_map.find(name_hash); if (elem != skel->bone_name_map.end()) return (int32_t)(elem->second - skel->bone_name.data()); } @@ -331,7 +359,11 @@ const std::vector* bone_database::get_bone_name_table(const char* k if (!kind_name) return 0; - auto elem = bonedata_map.find(hash_utf8_murmurhash(kind_name)); + uint32_t kind_name_hash = hash_utf8_murmurhash(kind_name); + if (kind_name_hash == hash_murmurhash_empty) + return 0; + + auto elem = bonedata_map.find(kind_name_hash); if (elem != bonedata_map.end()) return &elem->second->bone_name; return 0; @@ -341,10 +373,18 @@ int32_t bone_database::get_bone_node_index(const char* kind_name, const char* na if (!kind_name || !name) return -1; - auto elem = bonedata_map.find(hash_utf8_murmurhash(kind_name)); + uint32_t kind_name_hash = hash_utf8_murmurhash(kind_name); + if (kind_name_hash == hash_murmurhash_empty) + return -1; + + auto elem = bonedata_map.find(kind_name_hash); if (elem != bonedata_map.end()) { + uint32_t name_hash = hash_utf8_murmurhash(name); + if (name_hash == hash_murmurhash_empty) + return -1; + const BoneData* skel = elem->second; - auto elem = skel->bone_node_name_map.find(hash_utf8_murmurhash(name)); + auto elem = skel->bone_node_name_map.find(name_hash); if (elem != skel->bone_node_name_map.end()) return (int32_t)(elem->second - skel->bone_node_name.data()); } @@ -355,7 +395,11 @@ const std::vector* bone_database::get_bone_node_name_table(const ch if (!kind_name) return 0; - auto elem = bonedata_map.find(hash_utf8_murmurhash(kind_name)); + uint32_t kind_name_hash = hash_utf8_murmurhash(kind_name); + if (kind_name_hash == hash_murmurhash_empty) + return 0; + + auto elem = bonedata_map.find(kind_name_hash); if (elem != bonedata_map.end()) return &elem->second->bone_node_name; return 0; @@ -365,7 +409,11 @@ const std::vector* bone_database::get_node_parent_table(const cha if (!kind_name) return 0; - auto elem = bonedata_map.find(hash_utf8_murmurhash(kind_name)); + uint32_t kind_name_hash = hash_utf8_murmurhash(kind_name); + if (kind_name_hash == hash_murmurhash_empty) + return 0; + + auto elem = bonedata_map.find(kind_name_hash); if (elem != bonedata_map.end()) return &elem->second->parent_node; return 0; @@ -375,7 +423,11 @@ const float_t* bone_database::get_heel_height(const char* kind_name) const { if (!kind_name) return 0; - auto elem = bonedata_map.find(hash_utf8_murmurhash(kind_name)); + uint32_t kind_name_hash = hash_utf8_murmurhash(kind_name); + if (kind_name_hash == hash_murmurhash_empty) + return 0; + + auto elem = bonedata_map.find(kind_name_hash); if (elem != bonedata_map.end()) return &elem->second->heel_height; return 0; diff --git a/src/KKdLib/database/motion.cpp b/src/KKdLib/database/motion.cpp index 07e2a81e..333b0c84 100644 --- a/src/KKdLib/database/motion.cpp +++ b/src/KKdLib/database/motion.cpp @@ -294,7 +294,11 @@ const motion_set_info* motion_database::get_motion_set_by_name(const char* name) if (!name) return 0; - auto elem = motion_set_names.find(hash_utf8_murmurhash(name)); + uint32_t name_hash = hash_utf8_murmurhash(name); + if (name_hash == hash_murmurhash_empty) + return 0; + + auto elem = motion_set_names.find(name_hash); if (elem != motion_set_names.end()) return elem->second; return 0; @@ -314,7 +318,11 @@ const motion_set_info* motion_database::get_motion_set_by_motion_name(const char if (!name) return 0; - auto elem = motion_set_motion_names.find(hash_utf8_murmurhash(name)); + uint32_t name_hash = hash_utf8_murmurhash(name); + if (name_hash == hash_murmurhash_empty) + return 0; + + auto elem = motion_set_motion_names.find(name_hash); if (elem != motion_set_motion_names.end()) return elem->second; return 0; @@ -334,7 +342,11 @@ uint32_t motion_database::get_motion_set_id_by_motion_name(const char* name) con if (!name) return -1; - auto elem = motion_names.find(hash_utf8_murmurhash(name)); + uint32_t name_hash = hash_utf8_murmurhash(name); + if (name_hash == hash_murmurhash_empty) + return -1; + + auto elem = motion_names.find(name_hash); if (elem != motion_names.end()) return elem->second->set_id; return -1; @@ -344,7 +356,11 @@ uint32_t motion_database::get_motion_set_id(const char* name) const { if (!name) return -1; - auto elem = motion_set_names.find(hash_utf8_murmurhash(name)); + uint32_t name_hash = hash_utf8_murmurhash(name); + if (name_hash == hash_murmurhash_empty) + return -1; + + auto elem = motion_set_names.find(name_hash); if (elem != motion_set_names.end()) return elem->second->id; return -1; @@ -374,7 +390,11 @@ const motion_info* motion_database::get_motion_by_name(const char* name) const { if (!name) return 0; - auto elem = motion_names.find(hash_utf8_murmurhash(name)); + uint32_t name_hash = hash_utf8_murmurhash(name); + if (name_hash == hash_murmurhash_empty) + return 0; + + auto elem = motion_names.find(name_hash); if (elem != motion_names.end()) return elem->second; return 0; @@ -384,7 +404,11 @@ uint32_t motion_database::get_motion_id(const char* name) const { if (!name) return -1; - auto elem = motion_names.find(hash_utf8_murmurhash(name)); + uint32_t name_hash = hash_utf8_murmurhash(name); + if (name_hash == hash_murmurhash_empty) + return -1; + + auto elem = motion_names.find(name_hash); if (elem != motion_names.end()) return elem->second->id; return -1; diff --git a/src/KKdLib/database/object.cpp b/src/KKdLib/database/object.cpp index 7a857e10..da337711 100644 --- a/src/KKdLib/database/object.cpp +++ b/src/KKdLib/database/object.cpp @@ -386,7 +386,11 @@ const object_set_info* object_database::get_object_set_info(const char* name) co if (!name || !*name) return 0; - auto elem = obj_set_murmurhashes.find(hash_utf8_murmurhash(name)); + uint32_t name_hash = hash_utf8_murmurhash(name); + if (name_hash == hash_murmurhash_empty) + return 0; + + auto elem = obj_set_murmurhashes.find(name_hash); if (elem != obj_set_murmurhashes.end()) return elem->second; return 0; @@ -410,7 +414,11 @@ const object_info_data* object_database::get_object_info_data(const char* name) if (!str_utils_compare_length(name, name_len, "NULL", 5)) return 0; - auto elem = obj_murmurhashes.find(hash_utf8_murmurhash(name)); + uint32_t name_hash = hash_utf8_murmurhash(name); + if (name_hash == hash_murmurhash_empty) + return 0; + + auto elem = obj_murmurhashes.find(name_hash); if (elem != obj_murmurhashes.end()) return elem->second; return 0; @@ -454,7 +462,11 @@ uint32_t object_database::get_object_set_id(const char* name) const { if (!str_utils_compare_length(name, name_len, "NULL", 5)) return (uint32_t)-1; - auto elem = obj_set_murmurhashes.find(hash_utf8_murmurhash(name)); + uint32_t name_hash = hash_utf8_murmurhash(name); + if (name_hash == hash_murmurhash_empty) + return (uint32_t)-1; + + auto elem = obj_set_murmurhashes.find(name_hash); if (elem != obj_set_murmurhashes.end()) return elem->second->id; return (uint32_t)-1; @@ -478,7 +490,11 @@ object_info object_database::get_object_info(const char* name) const { if (!str_utils_compare_length(name, name_len, "NULL", 5)) return object_info(); - auto elem = obj_info_murmurhashes.find(hash_utf8_murmurhash(name)); + uint32_t name_hash = hash_utf8_murmurhash(name); + if (name_hash == hash_murmurhash_empty) + return object_info(); + + auto elem = obj_info_murmurhashes.find(name_hash); if (elem != obj_info_murmurhashes.end()) return elem->second; return object_info(); diff --git a/src/KKdLib/database/stage.cpp b/src/KKdLib/database/stage.cpp index 9f6cdbcb..afe97b4d 100644 --- a/src/KKdLib/database/stage.cpp +++ b/src/KKdLib/database/stage.cpp @@ -445,7 +445,11 @@ const ::stage_data_modern* stage_database::get_stage_data_modern(uint32_t stage_ } int32_t stage_database::get_stage_index(const char* name) const { - auto elem = stage_data_names.find(hash_utf8_murmurhash(name)); + uint32_t name_hash = hash_utf8_murmurhash(name); + if (name_hash == hash_murmurhash_empty) + return -1; + + auto elem = stage_data_names.find(name_hash); if (elem != stage_data_names.end()) return (int32_t)(elem->second - stage_data.data()); return -1; diff --git a/src/KKdLib/database/texture.cpp b/src/KKdLib/database/texture.cpp index 07dfadfc..ca9b4b88 100644 --- a/src/KKdLib/database/texture.cpp +++ b/src/KKdLib/database/texture.cpp @@ -307,7 +307,11 @@ uint32_t texture_database::get_texture_id(const char* name) const { if (!name) return -1; - auto elem = texture_murmurhashes.find(hash_utf8_murmurhash(name)); + uint32_t name_hash = hash_utf8_murmurhash(name); + if (name_hash == hash_murmurhash_empty) + return -1; + + auto elem = texture_murmurhashes.find(name_hash); if (elem != texture_murmurhashes.end()) return elem->second->id; return -1; diff --git a/src/ReDIVA/pv_game/pv_game.cpp b/src/ReDIVA/pv_game/pv_game.cpp index e35d0445..4ed3b355 100644 --- a/src/ReDIVA/pv_game/pv_game.cpp +++ b/src/ReDIVA/pv_game/pv_game.cpp @@ -255,8 +255,8 @@ void pv_game_edit_effect::unload() { reset(); } -pv_game_field::pv_game_field() : stage_index(), light_auth_3d_uid(), light_auth_3d_id(), -light_frame(), spr_set_back_id(), stage_flag(), npr_type(), cam_blur(), sdw_off() { +pv_game_field::pv_game_field() : stage_index(-1), light_auth_3d_uid(-1), light_auth_3d_id(), +light_frame(), spr_set_back_id(-1), stage_flag(), npr_type(), cam_blur(), sdw_off() { }