[WiP] Weird story still continues. Part 8

This commit is contained in:
korenkonder
2023-08-29 17:01:16 +03:00
parent 025cf7e28a
commit 2b4b61bc91
4 changed files with 732 additions and 16 deletions
+659 -7
View File
@@ -76,9 +76,13 @@ static float_t auth_3d_key_interpolate_inner(auth_3d_key* data, float_t frame);
static float_t auth_3d_interpolate_value(auth_3d_key_type type,
float_t frame, kft3* curr_key, kft3* next_key);
static void auth_3d_key_load(auth_3d* auth, auth_3d_key* k, auth_3d_key_file* kf);
static void auth_3d_key_store(auth_3d* auth, auth_3d_key* k, auth_3d_key_file* kf);
static void auth_3d_rgba_load(auth_3d* auth, auth_3d_rgba* rgba, auth_3d_rgba_file* rgbaf);
static void auth_3d_rgba_store(auth_3d* auth, auth_3d_rgba* rgba, auth_3d_rgba_file* rgbaf);
static void auth_3d_vec3_load(auth_3d* auth, auth_3d_vec3* vec, auth_3d_vec3_file* vecf);
static void auth_3d_vec3_store(auth_3d* auth, auth_3d_vec3* vec, auth_3d_vec3_file* vecf);
static void auth_3d_model_transform_load(auth_3d* auth, auth_3d_model_transform* mt, auth_3d_model_transform_file* mtf);
static void auth_3d_model_transform_store(auth_3d* auth, auth_3d_model_transform* mt, auth_3d_model_transform_file* mtf);
static int32_t auth_3d_get_auth_3d_object_index_by_object_info(auth_3d* auth,
object_info obj_info, int32_t instance);
@@ -95,60 +99,93 @@ static void auth_3d_set_material_list(auth_3d* auth, render_context* rctx);
static void auth_3d_ambient_load(auth_3d* auth, auth_3d_ambient* a, auth_3d_ambient_file* af);
static void auth_3d_ambient_set(auth_3d_ambient* a, render_context* rctx);
static void auth_3d_ambient_store(auth_3d* auth, auth_3d_ambient* a, auth_3d_ambient_file* af);
static void auth_3d_camera_auxiliary_load(auth_3d* auth, auth_3d_camera_auxiliary_file* caf);
static void auth_3d_camera_auxiliary_restore_prev_value(auth_3d_camera_auxiliary* ca, render_context* rctx);
static void auth_3d_camera_auxiliary_set(auth_3d_camera_auxiliary* ca, render_context* rctx);
static void auth_3d_camera_auxiliary_store(auth_3d* auth, auth_3d_camera_auxiliary_file* caf);
static float_t auth_3d_camera_root_calc_frame(auth_3d_camera_root* cr, float_t frame, render_context* rctx);
static void auth_3d_camera_root_load(auth_3d* auth, auth_3d_camera_root* cr, auth_3d_camera_root_file* crf);
static void auth_3d_camera_root_store(auth_3d* auth, auth_3d_camera_root* cr, auth_3d_camera_root_file* crf);
static void auth_3d_camera_root_view_point_load(auth_3d* auth, auth_3d_camera_root_view_point* crvp,
auth_3d_camera_root_view_point_file* crvpf);
static void auth_3d_camera_root_view_point_store(auth_3d* auth, auth_3d_camera_root_view_point* crvp,
auth_3d_camera_root_view_point_file* crvpf);
static void auth_3d_chara_disp(auth_3d_chara* c, auth_3d* auth, render_context* rctx);
static void auth_3d_chara_load(auth_3d* auth, auth_3d_chara* c, auth_3d_chara_file* cf);
static void auth_3d_chara_store(auth_3d* auth, auth_3d_chara* c, auth_3d_chara_file* cf);
static void auth_3d_curve_load(auth_3d* auth, auth_3d_curve* c, auth_3d_curve_file* cf);
static void auth_3d_curve_store(auth_3d* auth, auth_3d_curve* c, auth_3d_curve_file* cf);
static void auth_3d_dof_load(auth_3d* auth, auth_3d_dof* d, auth_3d_dof_file* df);
static void auth_3d_dof_restore_prev_value(auth_3d_dof* d, render_context* rctx);
static void auth_3d_dof_set(auth_3d_dof* d, render_context* rctx);
static void auth_3d_dof_store(auth_3d* auth, auth_3d_dof* d, auth_3d_dof_file* df);
static auth_3d_detail::Event* auth_3d_event_load(auth_3d* auth, auth_3d_event_file* ef);
static void auth_3d_event_store(auth_3d* auth, auth_3d_detail::Event* e, auth_3d_event_file* ef);
static const char* auth_3d_event_type_string(auth_3d_detail::Event::Type type);
static void auth_3d_fog_load(auth_3d* auth, auth_3d_fog* e, auth_3d_fog_file* ff);
static void auth_3d_fog_load(auth_3d* auth, auth_3d_fog* f, auth_3d_fog_file* ff);
static void auth_3d_fog_restore_prev_value(auth_3d_fog* f, render_context* rctx);
static void auth_3d_fog_set(auth_3d_fog* f, render_context* rctx);
static void auth_3d_light_load(auth_3d* auth, auth_3d_light* a, auth_3d_light_file* lf);
static void auth_3d_fog_store(auth_3d* auth, auth_3d_fog* f, auth_3d_fog_file* ff);
static void auth_3d_light_load(auth_3d* auth, auth_3d_light* l, auth_3d_light_file* lf);
static void auth_3d_light_restore_prev_value(auth_3d_light* l, render_context* rctx);
static void auth_3d_light_set(auth_3d_light* l, render_context* rctx);
static void auth_3d_light_store(auth_3d* auth, auth_3d_light* l, auth_3d_light_file* lf);
static void auth_3d_m_object_hrc_disp(auth_3d_m_object_hrc* moh, auth_3d* auth, render_context* rctx);
static void auth_3d_m_object_hrc_get_mat(auth_3d_m_object_hrc* moh, mat4* mat);
static void auth_3d_m_object_hrc_load(auth_3d* auth, auth_3d_m_object_hrc* moh,
auth_3d_m_object_hrc_file* mohf, object_database* obj_db);
static void auth_3d_m_object_hrc_nodes_mat_mult(auth_3d_m_object_hrc* moh);
static void auth_3d_m_object_hrc_store(auth_3d* auth, auth_3d_m_object_hrc* moh,
auth_3d_m_object_hrc_file* mohf);
static void auth_3d_material_list_load(auth_3d* auth, auth_3d_material_list* ml, auth_3d_material_list_file* mlf);
static void auth_3d_material_list_store(auth_3d* auth, auth_3d_material_list* ml, auth_3d_material_list_file* mlf);
static void auth_3d_object_disp(auth_3d_object* o, auth_3d* auth, render_context* rctx);
static void auth_3d_object_load(auth_3d* auth, auth_3d_object* o,
auth_3d_object_file* of, object_database* obj_db, texture_database* tex_db);
static void auth_3d_object_curve_load(auth_3d* auth, auth_3d_object_curve* curve,
static void auth_3d_object_store(auth_3d* auth, auth_3d_object* o,
auth_3d_object_file* of);
static void auth_3d_object_curve_load(auth_3d* auth, auth_3d_object_curve* oc,
std::string& name, float_t frame_offset);
static void auth_3d_object_curve_store(auth_3d* auth, auth_3d_object_curve* oc,
std::string& name, float_t& frame_offset);
static void auth_3d_object_hrc_disp(auth_3d_object_hrc* oh, auth_3d* auth, render_context* rctx);
static void auth_3d_object_hrc_load(auth_3d* auth, auth_3d_object_hrc* oh,
auth_3d_object_hrc_file* ohf, object_database* obj_db);
static void auth_3d_object_hrc_store(auth_3d* auth, auth_3d_object_hrc* oh,
auth_3d_object_hrc_file* ohf);
static bool auth_3d_object_hrc_replace_chara(auth_3d_object_hrc* oh,
chara_index src_chara, chara_index dst_chara, object_database* obj_db);
static void auth_3d_object_hrc_nodes_mat_mult(auth_3d_object_hrc* oh, const mat4* mat);
static void auth_3d_object_instance_load(auth_3d* auth, auth_3d_object_instance* oi,
auth_3d_object_instance_file* oif, auth_3d_m_object_hrc* moh, object_database* obj_db);
static void auth_3d_object_instance_store(auth_3d* auth, auth_3d_object_instance* oi,
auth_3d_object_instance_file* oif, auth_3d_m_object_hrc* moh);
static void auth_3d_object_model_transform_load(auth_3d* auth,
auth_3d_object_model_transform* omt, auth_3d_model_transform_file* mtf);
static void auth_3d_object_model_transform_store(auth_3d* auth,
auth_3d_object_model_transform* omt, auth_3d_model_transform_file* mtf);
static void auth_3d_object_node_load(auth_3d* auth,
auth_3d_object_node* on, auth_3d_object_node_file* onf);
static void auth_3d_object_node_store(auth_3d* auth,
auth_3d_object_node* on, auth_3d_object_node_file* onf);
static void auth_3d_object_texture_pattern_load(auth_3d* auth, auth_3d_object_texture_pattern* otp,
auth_3d_object_texture_pattern_file* otpf, texture_database* tex_db);
static void auth_3d_object_texture_pattern_store(auth_3d* auth, auth_3d_object_texture_pattern* otp,
auth_3d_object_texture_pattern_file* otpf);
static void auth_3d_object_texture_transform_load(auth_3d* auth, auth_3d_object_texture_transform* ott,
auth_3d_object_texture_transform_file* ottf, texture_database* tex_db);
static void auth_3d_object_texture_transform_store(auth_3d* auth, auth_3d_object_texture_transform* ott,
auth_3d_object_texture_transform_file* ottf);
static void auth_3d_play_control_load(auth_3d* auth, auth_3d_play_control_file* pcf);
static void auth_3d_play_control_store(auth_3d* auth, auth_3d_play_control_file* pcf);
static void auth_3d_point_disp(auth_3d_point* p, auth_3d* auth, render_context* rctx);
static void auth_3d_point_load(auth_3d* auth, auth_3d_point* p, auth_3d_point_file* pf);
static void auth_3d_point_store(auth_3d* auth, auth_3d_point* p, auth_3d_point_file* pf);
static void auth_3d_post_process_load(auth_3d* auth, auth_3d_post_process* pp, auth_3d_post_process_file* ppf);
static void auth_3d_post_process_restore_prev_value(auth_3d_post_process* pp, render_context* rctx);
static void auth_3d_post_process_set(auth_3d_post_process* pp, render_context* rctx);
static void auth_3d_post_process_store(auth_3d* auth, auth_3d_post_process* pp, auth_3d_post_process_file* ppf);
static bool auth_3d_data_struct_init(auth_3d_data_struct* auth_3d_data, render_context* rctx);
static bool auth_3d_data_struct_check_category_loaded(
@@ -469,7 +506,7 @@ void auth_3d::load(a3da* auth_file,
size_t auth_2d_index = 0;
auth_2d.resize(auth_file->auth_2d.size());
for (std::string& i : auth_file->auth_2d)
auth_2d[auth_2d_index++] = i;
auth_2d[auth_2d_index++].assign(i);
}
if (auth_file->camera_root.size()) {
@@ -534,7 +571,7 @@ void auth_3d::load(a3da* auth_file,
size_t motion_index = 0;
motion.resize(auth_file->motion.size());
for (std::string& i : auth_file->motion)
motion[motion_index++] = i;
motion[motion_index++].assign(i);
}
if (auth_file->object.size()) {
@@ -773,6 +810,133 @@ void auth_3d::reset() {
hash = hash_murmurhash_empty;
}
void auth_3d::store(a3da* auth_file) {
auth_3d_play_control_store(this, &auth_file->play_control);
auth_3d_camera_auxiliary_store(this, &auth_file->camera_auxiliary);
auth_3d_dof_store(this, &dof, &auth_file->dof);
auth_3d_post_process_store(this, &post_process, &auth_file->post_process);
if (ambient.size()) {
size_t ambient_index = 0;
auth_file->ambient.resize(auth_file->ambient.size());
for (auth_3d_ambient& i : ambient)
auth_3d_ambient_store(this, &i, &auth_file->ambient[ambient_index++]);
}
if (auth_2d.size()) {
size_t auth_2d_index = 0;
auth_file->auth_2d.resize(auth_2d.size());
for (std::string& i : auth_2d)
auth_file->auth_2d[auth_2d_index++].assign(i);
}
if (camera_root.size()) {
size_t camera_root_index = 0;
auth_file->camera_root.resize(camera_root.size());
for (auth_3d_camera_root& i : camera_root)
auth_3d_camera_root_store(this, &i, &auth_file->camera_root[camera_root_index++]);
}
if (chara.size()) {
size_t chara_index = 0;
auth_file->chara.resize(chara.size());
for (auth_3d_chara& i : chara)
auth_3d_chara_store(this, &i, &auth_file->chara[chara_index++]);
}
if (curve.size()) {
size_t curve_index = 0;
auth_file->curve.resize(curve.size());
for (auth_3d_curve& i : curve)
auth_3d_curve_store(this, &i, &auth_file->curve[curve_index++]);
}
if (event.size()) {
size_t event_index = 0;
auth_file->event.resize(event.size());
for (auth_3d_detail::Event*& i : event)
auth_3d_event_store(this, i, &auth_file->event[event_index]);
}
if (fog.size()) {
size_t fog_index = 0;
auth_file->fog.resize(fog.size());
for (auth_3d_fog& i : fog)
auth_3d_fog_store(this, &i, &auth_file->fog[fog_index++]);
}
if (light.size()) {
size_t light_index = 0;
auth_file->light.resize(light.size());
for (auth_3d_light& i : light)
auth_3d_light_store(this, &i, &auth_file->light[light_index++]);
}
if (m_object_hrc.size()) {
size_t m_object_hrc_index = 0;
auth_file->m_object_hrc.resize(m_object_hrc.size());
for (auth_3d_m_object_hrc& i : m_object_hrc)
auth_3d_m_object_hrc_store(this, &i, &auth_file->m_object_hrc[m_object_hrc_index++]);
}
if (material_list.size()) {
size_t material_list_index = 0;
auth_file->material_list.resize(material_list.size());
for (auth_3d_material_list& i : material_list)
auth_3d_material_list_store(this, &i, &auth_file->material_list[material_list_index++]);
}
if (motion.size()) {
size_t motion_index = 0;
auth_file->motion.resize(motion.size());
for (std::string& i : motion)
auth_file->motion[motion_index++].assign(i);
}
if (object.size()) {
size_t object_index = 0;
auth_file->object.resize(object.size());
for (auth_3d_object& i : object)
auth_3d_object_store(this, &i, &auth_file->object[object_index++]);
}
if (object_hrc.size()) {
size_t object_hrc_index = 0;
auth_file->object_hrc.resize(object_hrc.size());
for (auth_3d_object_hrc& i : object_hrc)
auth_3d_object_hrc_store(this, &i, &auth_file->object_hrc[object_hrc_index++]);
}
if (point.size()) {
size_t point_index = 0;
auth_file->point.resize(point.size());
for (auth_3d_point& i : point)
auth_3d_point_store(this, &i, &auth_file->point[point_index++]);
}
if (m_object_hrc_list.size()) {
size_t m_object_hrc_list_index = 0;
auth_file->m_object_hrc_list.resize(m_object_hrc_list.size());
for (auth_3d_m_object_hrc*& i : m_object_hrc_list)
auth_file->m_object_hrc_list[m_object_hrc_list_index++].assign(i->name);
}
if (object_list.size()) {
size_t object_list_index = 0;
auth_file->object_list.resize(object_list.size());
for (auth_3d_object*& i : object_list)
auth_file->object_list[object_list_index++].assign(i->name);
}
if (object_hrc_list.size()) {
size_t object_hrc_list_index = 0;
auth_file->object_hrc_list.resize(object_hrc_list.size());
for (auth_3d_object_hrc*& i : object_hrc_list)
auth_file->object_hrc_list[object_hrc_list_index++].assign(i->name);
}
}
void auth_3d::unload(render_context* rctx) {
auth_3d_camera_auxiliary_restore_prev_value(&camera_auxiliary, rctx);
for (auth_3d_light& i : light)
@@ -1935,6 +2099,10 @@ void auth_3d_object_model_transform::interpolate(float_t frame) {
has_translation = true;
}
void auth_3d_object_model_transform::mat_mult(const mat4* mat) {
mat4_mult(&this->mat_inner, mat, &this->mat);
}
void auth_3d_object_model_transform::reset() {
mat = mat4_identity;
mat_inner = mat4_identity;
@@ -3338,6 +3506,53 @@ static void auth_3d_key_load(auth_3d* auth, auth_3d_key* k, auth_3d_key_file* kf
}
}
static void auth_3d_key_store(auth_3d* auth, auth_3d_key* k, auth_3d_key_file* kf) {
kf->max_frame = auth->max_frame;
switch (k->type) {
case AUTH_3D_KEY_NONE :
kf->type = A3DA_KEY_NONE;
kf->value = 0.0f;
return;
case AUTH_3D_KEY_STATIC :
kf->type = k->value != 0.0f ? A3DA_KEY_STATIC : A3DA_KEY_NONE;
kf->value = k->value;
return;
case AUTH_3D_KEY_LINEAR :
kf->type = A3DA_KEY_LINEAR;
break;
case AUTH_3D_KEY_HERMITE:
default:
kf->type = A3DA_KEY_HERMITE;
break;
case AUTH_3D_KEY_HOLD :
kf->type = A3DA_KEY_HOLD;
break;
}
size_t length = k->keys_vec.size();
if (length > 1) {
kf->keys.assign(k->keys_vec.begin(), k->keys_vec.end());
kft3* first_key = &k->keys[0];
kft3* last_key = &k->keys[length - 1];
if (first_key->frame < last_key->frame
&& last_key->frame > 0.0f && k->max_frame > first_key->frame) {
kf->ep_type_pre = (a3da_ep_type)k->ep_type_pre;
kf->ep_type_post = (a3da_ep_type)k->ep_type_post;
}
}
else if (length == 1) {
float_t value = k->keys_vec.front().value;
kf->type = value != 0.0f ? A3DA_KEY_STATIC : A3DA_KEY_NONE;
kf->value = value;
}
else {
kf->type = A3DA_KEY_NONE;
kf->value = 0.0f;
}
}
static void auth_3d_rgba_load(auth_3d* auth, auth_3d_rgba* rgba, auth_3d_rgba_file* rgbaf) {
if (rgbaf->flags & A3DA_RGBA_R) {
auth_3d_key_load(auth, &rgba->r, &rgbaf->r);
@@ -3360,12 +3575,40 @@ static void auth_3d_rgba_load(auth_3d* auth, auth_3d_rgba* rgba, auth_3d_rgba_fi
}
}
static void auth_3d_rgba_store(auth_3d* auth, auth_3d_rgba* rgba, auth_3d_rgba_file* rgbaf) {
if (rgba->flags & AUTH_3D_RGBA_R) {
auth_3d_key_store(auth, &rgba->r, &rgbaf->r);
enum_or(rgbaf->flags, A3DA_RGBA_R);
}
if (rgba->flags & AUTH_3D_RGBA_G) {
auth_3d_key_store(auth, &rgba->g, &rgbaf->g);
enum_or(rgbaf->flags, A3DA_RGBA_G);
}
if (rgba->flags & AUTH_3D_RGBA_B) {
auth_3d_key_store(auth, &rgba->b, &rgbaf->b);
enum_or(rgbaf->flags, A3DA_RGBA_B);
}
if (rgba->flags & AUTH_3D_RGBA_A) {
auth_3d_key_store(auth, &rgba->a, &rgbaf->a);
enum_or(rgbaf->flags, A3DA_RGBA_A);
}
}
static void auth_3d_vec3_load(auth_3d* auth, auth_3d_vec3* vec, auth_3d_vec3_file* vecf) {
auth_3d_key_load(auth, &vec->x, &vecf->x);
auth_3d_key_load(auth, &vec->y, &vecf->y);
auth_3d_key_load(auth, &vec->z, &vecf->z);
}
static void auth_3d_vec3_store(auth_3d* auth, auth_3d_vec3* vec, auth_3d_vec3_file* vecf) {
auth_3d_key_store(auth, &vec->x, &vecf->x);
auth_3d_key_store(auth, &vec->y, &vecf->y);
auth_3d_key_store(auth, &vec->z, &vecf->z);
}
static void auth_3d_model_transform_load(auth_3d* auth, auth_3d_model_transform* mt, auth_3d_model_transform_file* mtf) {
auth_3d_vec3_load(auth, &mt->rotation, &mtf->rotation);
auth_3d_vec3_load(auth, &mt->scale, &mtf->scale);
@@ -3373,6 +3616,13 @@ static void auth_3d_model_transform_load(auth_3d* auth, auth_3d_model_transform*
auth_3d_key_load(auth, &mt->visibility, &mtf->visibility);
}
static void auth_3d_model_transform_store(auth_3d* auth, auth_3d_model_transform* mt, auth_3d_model_transform_file* mtf) {
auth_3d_vec3_store(auth, &mt->rotation, &mtf->rotation);
auth_3d_vec3_store(auth, &mt->scale, &mtf->scale);
auth_3d_vec3_store(auth, &mt->translation, &mtf->translation);
auth_3d_key_store(auth, &mt->visibility, &mtf->visibility);
}
static int32_t auth_3d_get_auth_3d_object_index_by_object_info(auth_3d* auth,
object_info obj_info, int32_t instance) {
int32_t obj_instance = 0;
@@ -3531,6 +3781,20 @@ static void auth_3d_ambient_set(auth_3d_ambient* a, render_context* rctx) {
}
static void auth_3d_ambient_store(auth_3d* auth, auth_3d_ambient* a, auth_3d_ambient_file* af) {
if (a->flags & AUTH_3D_AMBIENT_LIGHT_DIFFUSE) {
auth_3d_rgba_store(auth, &a->light_diffuse, &af->light_diffuse);
enum_or(af->flags, A3DA_AMBIENT_LIGHT_DIFFUSE);
}
af->name.assign(a->name);
if (a->flags & AUTH_3D_AMBIENT_LIGHT_DIFFUSE) {
auth_3d_rgba_store(auth, &a->rim_light_diffuse, &af->rim_light_diffuse);
enum_or(af->flags, A3DA_AMBIENT_LIGHT_DIFFUSE);
}
}
static void auth_3d_camera_auxiliary_load(auth_3d* auth, auth_3d_camera_auxiliary_file* caf) {
auth_3d_camera_auxiliary* ca = &auth->camera_auxiliary;
@@ -3595,6 +3859,40 @@ static void auth_3d_camera_auxiliary_set(auth_3d_camera_auxiliary* ca, render_co
tm->set_saturate_coeff(ca->saturate_value);
}
static void auth_3d_camera_auxiliary_store(auth_3d* auth, auth_3d_camera_auxiliary_file* caf) {
auth_3d_camera_auxiliary* ca = &auth->camera_auxiliary;
if (ca->flags & AUTH_3D_CAMERA_AUXILIARY_AUTO_EXPOSURE) {
auth_3d_key_store(auth, &ca->auto_exposure, &caf->auto_exposure);
enum_or(caf->flags, A3DA_CAMERA_AUXILIARY_AUTO_EXPOSURE);
}
if (ca->flags & AUTH_3D_CAMERA_AUXILIARY_EXPOSURE) {
auth_3d_key_store(auth, &ca->exposure, &caf->exposure);
enum_or(caf->flags, A3DA_CAMERA_AUXILIARY_EXPOSURE);
}
if (ca->flags & AUTH_3D_CAMERA_AUXILIARY_EXPOSURE_RATE) {
auth_3d_key_store(auth, &ca->exposure_rate, &caf->exposure_rate);
enum_or(caf->flags, A3DA_CAMERA_AUXILIARY_EXPOSURE_RATE);
}
if (ca->flags & AUTH_3D_CAMERA_AUXILIARY_GAMMA) {
auth_3d_key_store(auth, &ca->gamma, &caf->gamma);
enum_or(caf->flags, A3DA_CAMERA_AUXILIARY_GAMMA);
}
if (ca->flags & AUTH_3D_CAMERA_AUXILIARY_GAMMA_RATE) {
auth_3d_key_store(auth, &ca->gamma_rate, &caf->gamma_rate);
enum_or(caf->flags, A3DA_CAMERA_AUXILIARY_GAMMA_RATE);
}
if (ca->flags & AUTH_3D_CAMERA_AUXILIARY_SATURATE) {
auth_3d_key_store(auth, &ca->saturate, &caf->saturate);
enum_or(caf->flags, A3DA_CAMERA_AUXILIARY_SATURATE);
}
}
static float_t auth_3d_camera_root_calc_frame(auth_3d_camera_root* cr, float_t frame, render_context* rctx) {
if (auth_3d_key_detect_fast_change(&cr->view_point.model_transform.translation.x, frame, 0.3f)
|| auth_3d_key_detect_fast_change(&cr->view_point.model_transform.translation.y, frame, 0.3f)
@@ -3627,6 +3925,12 @@ static void auth_3d_camera_root_load(auth_3d* auth, auth_3d_camera_root* cr, aut
auth_3d_camera_root_view_point_load(auth, &cr->view_point, &crf->view_point);
}
static void auth_3d_camera_root_store(auth_3d* auth, auth_3d_camera_root* cr, auth_3d_camera_root_file* crf) {
auth_3d_model_transform_store(auth, &cr->interest, &crf->interest);
auth_3d_model_transform_store(auth, &cr->model_transform, &crf->model_transform);
auth_3d_camera_root_view_point_store(auth, &cr->view_point, &crf->view_point);
}
static void auth_3d_camera_root_view_point_load(auth_3d* auth, auth_3d_camera_root_view_point* crvp,
auth_3d_camera_root_view_point_file* crvpf) {
crvp->aspect = crvpf->aspect;
@@ -3650,6 +3954,11 @@ static void auth_3d_camera_root_view_point_load(auth_3d* auth, auth_3d_camera_ro
}
}
static void auth_3d_camera_root_view_point_store(auth_3d* auth, auth_3d_camera_root_view_point* crvp,
auth_3d_camera_root_view_point_file* crvpf) {
}
static void auth_3d_chara_disp(auth_3d_chara* c, auth_3d* auth, render_context* rctx) {
if (c->index <= ROB_CHARA_COUNT)
rob_chara_array_set_visibility(c->index, c->model_transform.visible);
@@ -3665,11 +3974,21 @@ static void auth_3d_chara_load(auth_3d* auth, auth_3d_chara* c, auth_3d_chara_fi
c->name.assign(cf->name);
}
static void auth_3d_chara_store(auth_3d* auth, auth_3d_chara* c, auth_3d_chara_file* cf) {
auth_3d_model_transform_store(auth, &c->model_transform, &cf->model_transform);
cf->name.assign(c->name);
}
static void auth_3d_curve_load(auth_3d* auth, auth_3d_curve* c, auth_3d_curve_file* cf) {
auth_3d_key_load(auth, &c->curve, &cf->curve);
c->name.assign(cf->name);
}
static void auth_3d_curve_store(auth_3d* auth, auth_3d_curve* c, auth_3d_curve_file* cf) {
auth_3d_key_store(auth, &c->curve, &cf->curve);
cf->name.assign(c->name);
}
static void auth_3d_dof_load(auth_3d* auth, auth_3d_dof* d, auth_3d_dof_file* df) {
if (df->has_dof) {
auth_3d_model_transform_load(auth, &d->model_transform, &df->model_transform);
@@ -3702,6 +4021,13 @@ static void auth_3d_dof_set(auth_3d_dof* d, render_context* rctx) {
rctx->post_process.dof->set_dof_pv(&pv);
}
static void auth_3d_dof_store(auth_3d* auth, auth_3d_dof* d, auth_3d_dof_file* df) {
if (d->has_dof) {
auth_3d_model_transform_store(auth, &d->model_transform, &df->model_transform);
df->has_dof = true;
}
}
static auth_3d_detail::Event* auth_3d_event_load(auth_3d* auth, auth_3d_event_file* ef) {
auth_3d_detail::Event* e = 0;
switch (ef->type) {
@@ -3738,6 +4064,10 @@ static auth_3d_detail::Event* auth_3d_event_load(auth_3d* auth, auth_3d_event_fi
return e;
}
static void auth_3d_event_store(auth_3d* auth, auth_3d_detail::Event* e, auth_3d_event_file* ef) {
}
static const char* auth_3d_event_type_string(auth_3d_detail::Event::Type type) {
switch (type) {
case auth_3d_detail::Event::Type::MISC:
@@ -3845,6 +4175,30 @@ static void auth_3d_fog_set(auth_3d_fog* f, render_context* rctx) {
}
}
static void auth_3d_fog_store(auth_3d* auth, auth_3d_fog* f, auth_3d_fog_file* ff) {
if (f->flags & AUTH_3D_FOG_COLOR) {
auth_3d_rgba_store(auth, &f->color, &ff->color);
enum_or(ff->flags, A3DA_FOG_COLOR);
}
if (f->flags & AUTH_3D_FOG_DENSITY) {
auth_3d_key_store(auth, &f->density, &ff->density);
enum_or(ff->flags, A3DA_FOG_DENSITY);
}
if (f->flags & AUTH_3D_FOG_END) {
auth_3d_key_store(auth, &f->end, &ff->end);
enum_or(ff->flags, A3DA_FOG_END);
}
ff->id = f->id;
if (f->flags & AUTH_3D_FOG_START) {
auth_3d_key_store(auth, &f->start, &ff->start);
enum_or(ff->flags, A3DA_FOG_START);
}
}
static void auth_3d_light_load(auth_3d* auth, auth_3d_light* l, auth_3d_light_file* lf) {
if (lf->flags & A3DA_LIGHT_AMBIENT) {
auth_3d_rgba_load(auth, &l->ambient, &lf->ambient);
@@ -4013,6 +4367,77 @@ static void auth_3d_light_set(auth_3d_light* l, render_context* rctx) {
}
}
static void auth_3d_light_store(auth_3d* auth, auth_3d_light* l, auth_3d_light_file* lf) {
if (l->flags & AUTH_3D_LIGHT_AMBIENT) {
auth_3d_rgba_store(auth, &l->ambient, &lf->ambient);
enum_or(lf->flags, A3DA_LIGHT_AMBIENT);
}
if (l->flags & AUTH_3D_LIGHT_CONE_ANGLE) {
auth_3d_key_store(auth, &l->cone_angle, &lf->cone_angle);
enum_or(lf->flags, A3DA_LIGHT_CONE_ANGLE);
}
if (l->flags & AUTH_3D_LIGHT_CONSTANT) {
auth_3d_key_store(auth, &l->constant, &lf->constant);
enum_or(lf->flags, A3DA_LIGHT_CONSTANT);
}
if (l->flags & AUTH_3D_LIGHT_DIFFUSE) {
auth_3d_rgba_store(auth, &l->diffuse, &lf->diffuse);
enum_or(lf->flags, A3DA_LIGHT_DIFFUSE);
}
if (l->flags & AUTH_3D_LIGHT_DROP_OFF) {
auth_3d_key_store(auth, &l->drop_off, &lf->drop_off);
enum_or(lf->flags, A3DA_LIGHT_DROP_OFF);
}
if (l->flags & AUTH_3D_LIGHT_FAR) {
auth_3d_key_store(auth, &l->_far, &lf->_far);
enum_or(lf->flags, A3DA_LIGHT_FAR);
}
lf->id = l->id;
if (l->flags & AUTH_3D_LIGHT_INTENSITY) {
auth_3d_key_store(auth, &l->intensity, &lf->intensity);
enum_or(lf->flags, A3DA_LIGHT_INTENSITY);
}
if (l->flags & AUTH_3D_LIGHT_LINEAR) {
auth_3d_key_store(auth, &l->linear, &lf->linear);
enum_or(lf->flags, A3DA_LIGHT_LINEAR);
}
if (l->flags & AUTH_3D_LIGHT_POSITION) {
auth_3d_model_transform_store(auth, &l->position, &lf->position);
enum_or(lf->flags, A3DA_LIGHT_POSITION);
}
if (l->flags & AUTH_3D_LIGHT_QUADRATIC) {
auth_3d_key_store(auth, &l->quadratic, &lf->quadratic);
enum_or(lf->flags, A3DA_LIGHT_QUADRATIC);
}
if (l->flags & AUTH_3D_LIGHT_SPECULAR) {
auth_3d_rgba_store(auth, &l->specular, &lf->specular);
enum_or(lf->flags, A3DA_LIGHT_SPECULAR);
}
if (l->flags & AUTH_3D_LIGHT_SPOT_DIRECTION) {
auth_3d_model_transform_store(auth, &l->spot_direction, &lf->spot_direction);
enum_or(lf->flags, A3DA_LIGHT_SPOT_DIRECTION);
}
if (l->flags & AUTH_3D_LIGHT_TONE_CURVE) {
auth_3d_rgba_store(auth, &l->tone_curve, &lf->tone_curve);
enum_or(lf->flags, A3DA_LIGHT_TONE_CURVE);
}
lf->type.assign(l->type);
}
static void auth_3d_m_object_hrc_get_mat(auth_3d_m_object_hrc* moh, mat4* mat) {
for (auth_3d_object_node& i : moh->node)
if (i.mat) {
@@ -4102,6 +4527,24 @@ static void auth_3d_m_object_hrc_nodes_mat_mult(auth_3d_m_object_hrc* moh) {
i.model_transform.mat = i.model_transform.mat_inner;
}
static void auth_3d_m_object_hrc_store(auth_3d* auth, auth_3d_m_object_hrc* moh,
auth_3d_m_object_hrc_file* mohf) {
size_t node_index = 0;
mohf->node.resize(moh->node.size());
for (auth_3d_object_node& i : moh->node)
auth_3d_object_node_store(auth,
&i, &mohf->node[node_index++]);
auth_3d_object_model_transform_store(auth, &moh->model_transform, &mohf->model_transform);
mohf->name.assign(moh->name);
size_t instance_index = 0;
mohf->instance.resize(moh->instance.size());
for (auth_3d_object_instance& i : moh->instance)
auth_3d_object_instance_store(auth,
&i, &mohf->instance[instance_index++], moh);
}
static void auth_3d_material_list_load(auth_3d* auth, auth_3d_material_list* ml, auth_3d_material_list_file* mlf) {
//int32_t ident[24] = {};
if (mlf->flags & A3DA_MATERIAL_LIST_BLEND_COLOR) {
@@ -5603,6 +6046,25 @@ static void auth_3d_material_list_load(auth_3d* auth, auth_3d_material_list* ml,
OutputDebugStringA(buf);*/
}
static void auth_3d_material_list_store(auth_3d* auth, auth_3d_material_list* ml, auth_3d_material_list_file* mlf) {
if (ml->flags & AUTH_3D_MATERIAL_LIST_BLEND_COLOR) {
auth_3d_rgba_store(auth, &ml->blend_color, &mlf->blend_color);
enum_or(mlf->flags, A3DA_MATERIAL_LIST_BLEND_COLOR);
}
if (ml->flags & AUTH_3D_MATERIAL_LIST_GLOW_INTENSITY) {
auth_3d_key_store(auth, &ml->glow_intensity, &mlf->glow_intensity);
enum_or(mlf->flags, A3DA_MATERIAL_LIST_GLOW_INTENSITY);
}
if (ml->flags & AUTH_3D_MATERIAL_LIST_EMISSION) {
auth_3d_rgba_store(auth, &ml->emission, &mlf->emission);
enum_or(mlf->flags, A3DA_MATERIAL_LIST_EMISSION);
}
mlf->name.assign(ml->name);
}
static void auth_3d_object_disp(auth_3d_object* o, auth_3d* auth, render_context* rctx) {
if (!o->model_transform.visible)
return;
@@ -5777,6 +6239,30 @@ static void auth_3d_object_load(auth_3d* auth, auth_3d_object* o,
o->object_hash = hash_string_murmurhash(o->uid_name);
}
static void auth_3d_object_store(auth_3d* auth, auth_3d_object* o,
auth_3d_object_file* of) {
auth_3d_model_transform_store(auth, &o->model_transform, &of->model_transform);
auth_3d_object_curve_store(auth, &o->morph, of->morph, of->morph_offset);
of->name.assign(o->name);
of->parent_name.assign(o->parent_name);
of->parent_node.assign(o->parent_node);
auth_3d_object_curve_store(auth, &o->pattern, of->pattern, of->pattern_offset);
size_t texture_pattern_index = 0;
of->texture_pattern.resize(o->texture_pattern.size());
for (auth_3d_object_texture_pattern& i : o->texture_pattern)
auth_3d_object_texture_pattern_store(auth,
&i, &of->texture_pattern[texture_pattern_index++]);
size_t texture_transform_index = 0;
of->texture_transform.resize(o->texture_transform.size());
for (auth_3d_object_texture_transform& i : o->texture_transform)
auth_3d_object_texture_transform_store(auth,
&i, &of->texture_transform[texture_transform_index++]);
of->uid_name.assign(o->uid_name);
}
static void auth_3d_object_curve_load(auth_3d* auth, auth_3d_object_curve* oc,
std::string& name, float_t frame_offset) {
if (!name.size())
@@ -5795,6 +6281,12 @@ static void auth_3d_object_curve_load(auth_3d* auth, auth_3d_object_curve* oc,
}
}
static void auth_3d_object_curve_store(auth_3d* auth, auth_3d_object_curve* oc,
std::string& name, float_t& frame_offset) {
name.assign(oc->name);
frame_offset = oc->frame_offset;
}
static void auth_3d_object_hrc_disp(auth_3d_object_hrc* oh, auth_3d* auth, render_context* rctx) {
if (!auth->visible || !oh->node.front().model_transform.visible)
return;
@@ -5902,6 +6394,22 @@ static void auth_3d_object_hrc_load(auth_3d* auth, auth_3d_object_hrc* oh,
}
}
static void auth_3d_object_hrc_store(auth_3d* auth, auth_3d_object_hrc* oh,
auth_3d_object_hrc_file* ohf) {
ohf->name.assign(oh->name);
size_t node_index = 0;
ohf->node.resize(oh->node.size());
for (auth_3d_object_node& i : oh->node)
auth_3d_object_node_store(auth,
&i, &ohf->node[node_index++]);
ohf->parent_name.assign(oh->parent_name);
ohf->parent_node.assign(oh->parent_node);
ohf->shadow = oh->shadow;
ohf->uid_name.assign(oh->uid_name);
}
static bool auth_3d_object_hrc_replace_chara(auth_3d_object_hrc* oh,
chara_index src_chara, chara_index dst_chara, object_database* obj_db) {
if (src_chara < 0 || src_chara >= CHARA_MAX || dst_chara < 0 || dst_chara >= CHARA_MAX || src_chara == dst_chara)
@@ -5971,6 +6479,14 @@ static void auth_3d_object_instance_load(auth_3d* auth, auth_3d_object_instance*
}
}
static void auth_3d_object_instance_store(auth_3d* auth, auth_3d_object_instance* oi,
auth_3d_object_instance_file* oif, auth_3d_m_object_hrc* moh) {
auth_3d_object_model_transform_store(auth, &oi->model_transform, &oif->model_transform);
oif->name.assign(oi->name);
oif->shadow = oi->shadow;
oif->uid_name.assign(oi->uid_name);
}
static void auth_3d_object_model_transform_load(auth_3d* auth,
auth_3d_object_model_transform* omt, auth_3d_model_transform_file* mtf) {
omt->mat = mat4_identity;
@@ -6008,8 +6524,12 @@ static void auth_3d_object_model_transform_load(auth_3d* auth,
omt->has_visibility = true;
}
void auth_3d_object_model_transform::mat_mult(const mat4* mat) {
mat4_mult(&this->mat_inner, mat, &this->mat);
static void auth_3d_object_model_transform_store(auth_3d* auth,
auth_3d_object_model_transform* omt, auth_3d_model_transform_file* mtf) {
auth_3d_vec3_store(auth, &omt->translation, &mtf->translation);
auth_3d_vec3_store(auth, &omt->rotation, &mtf->rotation);
auth_3d_vec3_store(auth, &omt->scale, &mtf->scale);
auth_3d_key_store(auth, &omt->visibility, &mtf->visibility);
}
static void auth_3d_object_node_load(auth_3d* auth,
@@ -6029,6 +6549,20 @@ static void auth_3d_object_node_load(auth_3d* auth,
on->parent = onf->parent;
}
static void auth_3d_object_node_store(auth_3d* auth,
auth_3d_object_node* on, auth_3d_object_node_file* onf) {
if (on->flags & AUTH_3D_OBJECT_NODE_JOINT_ORIENT) {
onf->joint_orient = on->joint_orient;
enum_or(onf->flags, A3DA_OBJECT_NODE_JOINT_ORIENT);
}
else
onf->joint_orient = 0.0f;
auth_3d_object_model_transform_store(auth, &on->model_transform, &onf->model_transform);
onf->name.assign(on->name);
onf->parent = on->parent;
}
static void auth_3d_object_texture_pattern_load(auth_3d* auth, auth_3d_object_texture_pattern* otp,
auth_3d_object_texture_pattern_file* otpf, texture_database* tex_db) {
otp->name.assign(otpf->name);
@@ -6036,6 +6570,12 @@ static void auth_3d_object_texture_pattern_load(auth_3d* auth, auth_3d_object_te
otp->texture_id = tex_db->get_texture_id(otp->name.c_str());
}
static void auth_3d_object_texture_pattern_store(auth_3d* auth, auth_3d_object_texture_pattern* otp,
auth_3d_object_texture_pattern_file* otpf) {
otpf->name.assign(otp->name);
auth_3d_object_curve_store(auth, &otp->pattern, otpf->pattern, otpf->pattern_offset);
}
static void auth_3d_object_texture_transform_load(auth_3d* auth, auth_3d_object_texture_transform* ott,
auth_3d_object_texture_transform_file* ottf, texture_database* tex_db) {
if (ottf->flags & A3DA_OBJECT_TEXTURE_TRANSFORM_COVERAGE_U) {
@@ -6093,6 +6633,61 @@ static void auth_3d_object_texture_transform_load(auth_3d* auth, auth_3d_object_
ott->texture_id = tex_db->get_texture_id(ott->name.c_str());
}
static void auth_3d_object_texture_transform_store(auth_3d* auth, auth_3d_object_texture_transform* ott,
auth_3d_object_texture_transform_file* ottf) {
if (ott->flags & AUTH_3D_OBJECT_TEXTURE_TRANSFORM_COVERAGE_U) {
auth_3d_key_store(auth, &ott->coverage_u, &ottf->coverage_u);
enum_or(ottf->flags, A3DA_OBJECT_TEXTURE_TRANSFORM_COVERAGE_U);
}
if (ott->flags & AUTH_3D_OBJECT_TEXTURE_TRANSFORM_COVERAGE_V) {
auth_3d_key_store(auth, &ott->coverage_v, &ottf->coverage_v);
enum_or(ottf->flags, A3DA_OBJECT_TEXTURE_TRANSFORM_COVERAGE_V);
}
ottf->name.assign(ott->name);
if (ott->flags & AUTH_3D_OBJECT_TEXTURE_TRANSFORM_OFFSET_U) {
auth_3d_key_store(auth, &ott->offset_u, &ottf->offset_u);
enum_or(ottf->flags, A3DA_OBJECT_TEXTURE_TRANSFORM_OFFSET_U);
}
if (ott->flags & AUTH_3D_OBJECT_TEXTURE_TRANSFORM_OFFSET_V) {
auth_3d_key_store(auth, &ott->offset_v, &ottf->offset_v);
enum_or(ottf->flags, A3DA_OBJECT_TEXTURE_TRANSFORM_OFFSET_V);
}
if (ott->flags & AUTH_3D_OBJECT_TEXTURE_TRANSFORM_REPEAT_U) {
auth_3d_key_store(auth, &ott->repeat_u, &ottf->repeat_u);
enum_or(ottf->flags, A3DA_OBJECT_TEXTURE_TRANSFORM_REPEAT_U);
}
if (ott->flags & AUTH_3D_OBJECT_TEXTURE_TRANSFORM_REPEAT_V) {
auth_3d_key_store(auth, &ott->repeat_v, &ottf->repeat_v);
enum_or(ottf->flags, A3DA_OBJECT_TEXTURE_TRANSFORM_REPEAT_V);
}
if (ott->flags & AUTH_3D_OBJECT_TEXTURE_TRANSFORM_ROTATE) {
auth_3d_key_store(auth, &ott->rotate, &ottf->rotate);
enum_or(ottf->flags, A3DA_OBJECT_TEXTURE_TRANSFORM_ROTATE);
}
if (ott->flags & AUTH_3D_OBJECT_TEXTURE_TRANSFORM_ROTATE_FRAME) {
auth_3d_key_store(auth, &ott->rotate_frame, &ottf->rotate_frame);
enum_or(ottf->flags, A3DA_OBJECT_TEXTURE_TRANSFORM_ROTATE_FRAME);
}
if (ott->flags & AUTH_3D_OBJECT_TEXTURE_TRANSFORM_TRANSLATE_FRAME_U) {
auth_3d_key_store(auth, &ott->translate_frame_u, &ottf->translate_frame_u);
enum_or(ottf->flags, A3DA_OBJECT_TEXTURE_TRANSFORM_TRANSLATE_FRAME_U);
}
if (ott->flags & AUTH_3D_OBJECT_TEXTURE_TRANSFORM_TRANSLATE_FRAME_V) {
auth_3d_key_store(auth, &ott->translate_frame_v, &ottf->translate_frame_v);
enum_or(ottf->flags, A3DA_OBJECT_TEXTURE_TRANSFORM_TRANSLATE_FRAME_V);
}
}
static void auth_3d_play_control_load(auth_3d* auth, auth_3d_play_control_file* pcf) {
auth_3d_play_control* pc = &auth->play_control;
@@ -6113,6 +6708,26 @@ static void auth_3d_play_control_load(auth_3d* auth, auth_3d_play_control_file*
pc->size = pcf->size;
}
static void auth_3d_play_control_store(auth_3d* auth, auth_3d_play_control_file* pcf) {
auth_3d_play_control* pc = &auth->play_control;
pcf->begin = pc->begin;
if (pc->flags & AUTH_3D_PLAY_CONTROL_DIV) {
pcf->div = pc->div;
enum_or(pcf->flags, A3DA_PLAY_CONTROL_DIV);
}
pcf->fps = pc->fps;
if (pc->flags & AUTH_3D_PLAY_CONTROL_OFFSET) {
pcf->div = pc->div;
enum_or(pcf->flags, A3DA_PLAY_CONTROL_OFFSET);
}
pcf->size = pc->size;
}
static void auth_3d_point_disp(auth_3d_point* p, auth_3d* auth, render_context* rctx) {
if (auth->pos) {
p->model_transform.set_mat(&auth->mat);
@@ -6125,6 +6740,11 @@ static void auth_3d_point_load(auth_3d* auth, auth_3d_point* p, auth_3d_point_fi
p->name.assign(pf->name);
}
static void auth_3d_point_store(auth_3d* auth, auth_3d_point* p, auth_3d_point_file* pf) {
auth_3d_model_transform_store(auth, &p->model_transform, &pf->model_transform);
pf->name.assign(p->name);
}
static void auth_3d_post_process_load(auth_3d* auth, auth_3d_post_process* pp, auth_3d_post_process_file* ppf) {
if (ppf->flags & A3DA_POST_PROCESS_INTENSITY) {
auth_3d_rgba_load(auth, &pp->intensity, &ppf->intensity);
@@ -6239,6 +6859,38 @@ static void auth_3d_post_process_set(auth_3d_post_process* pp, render_context* r
}
}
static void auth_3d_post_process_store(auth_3d* auth, auth_3d_post_process* pp, auth_3d_post_process_file* ppf) {
if (pp->flags & AUTH_3D_POST_PROCESS_INTENSITY) {
auth_3d_rgba_store(auth, &pp->intensity, &ppf->intensity);
enum_or(ppf->flags, A3DA_POST_PROCESS_INTENSITY);
}
if (pp->flags & AUTH_3D_POST_PROCESS_LENS_FLARE) {
auth_3d_key_store(auth, &pp->lens_flare, &ppf->lens_flare);
enum_or(ppf->flags, A3DA_POST_PROCESS_LENS_FLARE);
}
if (pp->flags & AUTH_3D_POST_PROCESS_LENS_GHOST) {
auth_3d_key_store(auth, &pp->lens_ghost, &ppf->lens_ghost);
enum_or(ppf->flags, A3DA_POST_PROCESS_LENS_GHOST);
}
if (pp->flags & AUTH_3D_POST_PROCESS_LENS_SHAFT) {
auth_3d_key_store(auth, &pp->lens_shaft, &ppf->lens_shaft);
enum_or(ppf->flags, A3DA_POST_PROCESS_LENS_SHAFT);
}
if (pp->flags & AUTH_3D_POST_PROCESS_RADIUS) {
auth_3d_rgba_store(auth, &pp->radius, &ppf->radius);
enum_or(ppf->flags, A3DA_POST_PROCESS_RADIUS);
}
if (pp->flags & AUTH_3D_POST_PROCESS_SCENE_FADE) {
auth_3d_rgba_store(auth, &pp->scene_fade, &ppf->scene_fade);
enum_or(ppf->flags, A3DA_POST_PROCESS_SCENE_FADE);
}
}
static bool auth_3d_data_struct_init(auth_3d_data_struct* auth_3d_data, render_context* rctx) {
auth_3d_data->loaded_ids.clear();
auth_3d_data->loaded_ids.shrink_to_fit();
+1
View File
@@ -941,6 +941,7 @@ struct auth_3d {
void load_from_farc(farc* f, const char* file,
object_database* obj_db, texture_database* tex_db);
void reset();
void store(a3da* auth_file);
void unload(render_context* rctx);
};
+11 -7
View File
@@ -1592,8 +1592,10 @@ static void a3da_write_text(a3da* a, void** data, size_t* size, bool a3dc) {
kv.write(s, "morph_offset", o->morph_offset);
}
kv.write(s, "name", o->name);
kv.write(s, "parent_name", o->parent_name);
kv.write(s, "parent_node", o->parent_node);
if (o->parent_name.size())
kv.write(s, "parent_name", o->parent_name);
if (o->parent_node.size())
kv.write(s, "parent_node", o->parent_node);
if (o->pattern.size()) {
kv.write(s, "pat", o->pattern);
kv.write(s, "pat_offset", o->pattern_offset);
@@ -1690,7 +1692,7 @@ static void a3da_write_text(a3da* a, void** data, size_t* size, bool a3dc) {
int32_t* sort_index_data = sort_index.data();
for (int32_t i = 0; i < count; i++) {
kv.open_scope_fmt(sort_index_data[i]);
kv.write(s, "name", vol[sort_index_data[i]]);
kv.write(s, vol[sort_index_data[i]]);
kv.close_scope();
}
@@ -1740,8 +1742,10 @@ static void a3da_write_text(a3da* a, void** data, size_t* size, bool a3dc) {
kv.close_scope();
}
kv.write(s, "parent_name", oh->parent_name);
kv.write(s, "parent_node", oh->parent_node);
if (oh->parent_name.size())
kv.write(s, "parent_name", oh->parent_name);
if (oh->parent_node.size())
kv.write(s, "parent_node", oh->parent_node);
kv.write(s, "shadow", oh->shadow);
kv.write(s, "uid_name", oh->uid_name);
@@ -1763,7 +1767,7 @@ static void a3da_write_text(a3da* a, void** data, size_t* size, bool a3dc) {
int32_t* sort_index_data = sort_index.data();
for (int32_t i = 0; i < count; i++) {
kv.open_scope_fmt(sort_index_data[i]);
kv.write(s, "name", vohl[sort_index_data[i]]);
kv.write(s, vohl[sort_index_data[i]]);
kv.close_scope();
}
@@ -1826,7 +1830,7 @@ static void a3da_write_text(a3da* a, void** data, size_t* size, bool a3dc) {
kv.open_scope_fmt(sort_index_data[i]);
a3da_point* p = &vp[sort_index_data[i]];
kv.write(s, "name", p->name);
kv.write(s, p->name);
key_val_out_write(&kv, s, "", p->model_transform);
kv.close_scope();
+61 -2
View File
@@ -7949,6 +7949,59 @@ static void x_pv_game_split_auth_3d_update_object_set(obj_set_handler* handler)
handler->obj_set = set;
}
static void x_pv_game_split_auth_3d_write_auth_3d(auth_3d* auth) {
char name[0x200];
strcpy_s(name, sizeof(name), auth->file_name.c_str());
char* ext = 0;
char* temp = name;
while (temp)
if (temp = strstr(temp, ".a3da"))
ext = temp++;
if (!ext) {
strcat_s(name, sizeof(name), ".a3da");
ext = strstr(name, ".a3da");
}
for (char* i = name; *i && i != ext; i++) {
char c = *i;
if (c >= 'A' && c <= 'Z')
*i += 0x20;
}
char buf[0x200];
file_stream s;
strcpy_s(buf, sizeof(buf), "patch\\!temp\\auth_3d\\");
strcat_s(buf, sizeof(buf), name);
for (char* i = name; *i && i != ext; i++) {
char c = *i;
if (c >= 'a' && c <= 'z')
*i -= 0x20;
}
a3da a;
auth->store(&a);
a._converter_version.assign("20111019");
a._file_name.assign(name);
a._property_version.assign("20110526");
a.ready = true;
a.compressed = false;
a.format = A3DA_FORMAT_AFT;
void* a3da_data = 0;
size_t a3da_length = 0;
a.write(&a3da_data, &a3da_length);
s.open(buf, "wb");
s.write(a3da_data, a3da_length);
s.close();
free_def(a3da_data);
}
static void x_pv_game_split_auth_3d_write_object_set(obj_set_handler* handler) {
obj_set* set = handler->obj_set;
@@ -7964,7 +8017,7 @@ static void x_pv_game_split_auth_3d_write_object_set(obj_set_handler* handler) {
char buf[0x200];
file_stream s;
strcpy_s(buf, sizeof(buf), "patch\\!temp\\");
strcpy_s(buf, sizeof(buf), "patch\\!temp\\objset\\");
strcat_s(buf, sizeof(buf), name);
strcat_s(buf, sizeof(buf), "_obj.bin");
@@ -8013,7 +8066,7 @@ static void x_pv_game_split_auth_3d_write_object_set(obj_set_handler* handler) {
free_def(obj_data);
strcpy_s(buf, sizeof(buf), "patch\\!temp\\");
strcpy_s(buf, sizeof(buf), "patch\\!temp\\objset\\");
strcat_s(buf, sizeof(buf), name);
strcat_s(buf, sizeof(buf), "_tex.bin");
@@ -10672,6 +10725,12 @@ static void x_pv_game_split_auth_3d_material_list(x_pv_game* xpvgm,
for (x_pv_game_stage_effect_auth_3d& k : chg_eff.auth_3d)
fix_object_morphs(k.id.get_auth_3d());
}
for (auto& i : stage_data_effect_auth_3ds)
x_pv_game_split_auth_3d_write_auth_3d(i.first);
for (auto& i : stage_data_change_effect_auth_3ds)
x_pv_game_split_auth_3d_write_auth_3d(i.first);
}
#pragma warning(pop)