mirror of
https://github.com/korenkonder/ReDIVA.git
synced 2026-10-02 19:58:01 +03:00
522 lines
12 KiB
C++
522 lines
12 KiB
C++
/*
|
|
by korenkonder
|
|
GitHub/GitLab: korenkonder
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
#include "default.hpp"
|
|
#include "light_param/fog.hpp"
|
|
#include "light_param/light.hpp"
|
|
#include "kf.hpp"
|
|
#include "mat.hpp"
|
|
#include "vec.hpp"
|
|
|
|
enum a3da_ambient_flags {
|
|
A3DA_AMBIENT_LIGHT_DIFFUSE = 0x01,
|
|
A3DA_AMBIENT_RIM_LIGHT_DIFFUSE = 0x02,
|
|
};
|
|
|
|
enum a3da_camera_auxiliary_flags {
|
|
A3DA_CAMERA_AUXILIARY_AUTO_EXPOSURE = 0x01,
|
|
A3DA_CAMERA_AUXILIARY_EXPOSURE = 0x02,
|
|
A3DA_CAMERA_AUXILIARY_EXPOSURE_RATE = 0x04,
|
|
A3DA_CAMERA_AUXILIARY_GAMMA = 0x08,
|
|
A3DA_CAMERA_AUXILIARY_GAMMA_RATE = 0x10,
|
|
A3DA_CAMERA_AUXILIARY_SATURATE = 0x20,
|
|
};
|
|
|
|
enum a3da_camera_root_view_point_flags {
|
|
A3DA_CAMERA_ROOT_VIEW_POINT_FOV = 0x01,
|
|
A3DA_CAMERA_ROOT_VIEW_POINT_ROLL = 0x02,
|
|
};
|
|
|
|
enum a3da_compress_f16 {
|
|
A3DA_COMPRESS_F32F32F32F32 = 0,
|
|
A3DA_COMPRESS_I16F16F32F32 = 1,
|
|
A3DA_COMPRESS_I16F16F16F16 = 2,
|
|
};
|
|
|
|
enum a3da_ep_type {
|
|
A3DA_EP_NONE = 0,
|
|
A3DA_EP_LINEAR = 1,
|
|
A3DA_EP_CYCLE = 2,
|
|
A3DA_EP_CYCLE_OFFSET = 3,
|
|
}; // Pre/Post Infinity
|
|
|
|
enum a3da_event_type {
|
|
A3DA_EVENT_MISC = 0x00,
|
|
A3DA_EVENT_FILT = 0x01,
|
|
A3DA_EVENT_FX = 0x02,
|
|
A3DA_EVENT_SND = 0x03,
|
|
A3DA_EVENT_MOT = 0x04,
|
|
A3DA_EVENT_A2D = 0x05,
|
|
};
|
|
|
|
enum a3da_fog_flags {
|
|
A3DA_FOG_COLOR = 0x01,
|
|
A3DA_FOG_DENSITY = 0x02,
|
|
A3DA_FOG_END = 0x04,
|
|
A3DA_FOG_START = 0x08,
|
|
};
|
|
|
|
enum a3da_format {
|
|
A3DA_FORMAT_DT = 0,
|
|
A3DA_FORMAT_F = 1,
|
|
A3DA_FORMAT_AFT = 2,
|
|
A3DA_FORMAT_F2 = 3,
|
|
A3DA_FORMAT_MGF = 4,
|
|
A3DA_FORMAT_X = 5,
|
|
A3DA_FORMAT_XHD = 6,
|
|
};
|
|
|
|
enum a3da_key_flags {
|
|
A3DA_KEY_BIN_OFFSET = 0x01,
|
|
};
|
|
|
|
enum a3da_key_type {
|
|
A3DA_KEY_NONE = 0,
|
|
A3DA_KEY_STATIC = 1,
|
|
A3DA_KEY_LINEAR = 2,
|
|
A3DA_KEY_HERMITE = 3,
|
|
A3DA_KEY_HOLD = 4,
|
|
};
|
|
|
|
enum a3da_light_flags {
|
|
A3DA_LIGHT_AMBIENT = 0x0001,
|
|
A3DA_LIGHT_CONE_ANGLE = 0x0002,
|
|
A3DA_LIGHT_CONSTANT = 0x0004,
|
|
A3DA_LIGHT_DIFFUSE = 0x0008,
|
|
A3DA_LIGHT_DROP_OFF = 0x0010,
|
|
A3DA_LIGHT_FAR = 0x0020,
|
|
A3DA_LIGHT_INTENSITY = 0x0040,
|
|
A3DA_LIGHT_LINEAR = 0x0080,
|
|
A3DA_LIGHT_POSITION = 0x0100,
|
|
A3DA_LIGHT_QUADRATIC = 0x0200,
|
|
A3DA_LIGHT_SPECULAR = 0x0400,
|
|
A3DA_LIGHT_SPOT_DIRECTION = 0x0800,
|
|
A3DA_LIGHT_TONE_CURVE = 0x1000,
|
|
};
|
|
|
|
enum a3da_material_list_flags {
|
|
A3DA_MATERIAL_LIST_BLEND_COLOR = 0x01,
|
|
A3DA_MATERIAL_LIST_GLOW_INTENSITY = 0x02,
|
|
A3DA_MATERIAL_LIST_INCANDESCENCE = 0x04,
|
|
};
|
|
|
|
enum a3da_model_transform_flags {
|
|
A3DA_MODEL_TRANSFORM_BIN_OFFSET = 0x01,
|
|
};
|
|
|
|
enum a3da_object_node_flags {
|
|
A3DA_OBJECT_NODE_JOINT_ORIENT = 0x01,
|
|
};
|
|
|
|
enum a3da_object_texture_transform_flags {
|
|
A3DA_OBJECT_TEXTURE_TRANSFORM_COVERAGE_U = 0x001,
|
|
A3DA_OBJECT_TEXTURE_TRANSFORM_COVERAGE_V = 0x002,
|
|
A3DA_OBJECT_TEXTURE_TRANSFORM_OFFSET_U = 0x004,
|
|
A3DA_OBJECT_TEXTURE_TRANSFORM_OFFSET_V = 0x008,
|
|
A3DA_OBJECT_TEXTURE_TRANSFORM_REPEAT_U = 0x010,
|
|
A3DA_OBJECT_TEXTURE_TRANSFORM_REPEAT_V = 0x020,
|
|
A3DA_OBJECT_TEXTURE_TRANSFORM_ROTATE = 0x040,
|
|
A3DA_OBJECT_TEXTURE_TRANSFORM_ROTATE_FRAME = 0x080,
|
|
A3DA_OBJECT_TEXTURE_TRANSFORM_TRANSLATE_FRAME_U = 0x100,
|
|
A3DA_OBJECT_TEXTURE_TRANSFORM_TRANSLATE_FRAME_V = 0x200,
|
|
};
|
|
|
|
enum a3da_play_control_flags {
|
|
A3DA_PLAY_CONTROL_DIV = 0x01,
|
|
A3DA_PLAY_CONTROL_OFFSET = 0x02,
|
|
};
|
|
|
|
enum a3da_post_process_flags {
|
|
A3DA_POST_PROCESS_INTENSITY = 0x01,
|
|
A3DA_POST_PROCESS_LENS_FLARE = 0x02,
|
|
A3DA_POST_PROCESS_LENS_GHOST = 0x04,
|
|
A3DA_POST_PROCESS_LENS_SHAFT = 0x08,
|
|
A3DA_POST_PROCESS_RADIUS = 0x10,
|
|
A3DA_POST_PROCESS_SCENE_FADE = 0x20,
|
|
};
|
|
|
|
enum a3da_rgba_flags {
|
|
A3DA_RGBA_R = 0x01,
|
|
A3DA_RGBA_G = 0x02,
|
|
A3DA_RGBA_B = 0x04,
|
|
A3DA_RGBA_A = 0x08,
|
|
};
|
|
|
|
struct a3da_ambient;
|
|
struct a3da_camera_auxiliary;
|
|
struct a3da_camera_root;
|
|
struct a3da_camera_root_view_point;
|
|
struct a3da_chara;
|
|
struct a3da_curve;
|
|
struct a3da_dof;
|
|
struct a3da_event;
|
|
struct a3da_fog;
|
|
struct a3da_key;
|
|
struct a3da_light;
|
|
struct a3da_m_object_hrc;
|
|
struct a3da_material_list;
|
|
struct a3da_model_transform;
|
|
struct a3da_object;
|
|
struct a3da_object_hrc;
|
|
struct a3da_object_instance;
|
|
struct a3da_object_node;
|
|
struct a3da_object_texture_pattern;
|
|
struct a3da_object_texture_transform;
|
|
struct a3da_play_control;
|
|
struct a3da_point;
|
|
struct a3da_post_process;
|
|
struct a3da_rgba;
|
|
struct a3da_vec3;
|
|
|
|
struct a3da_key {
|
|
a3da_key_flags flags;
|
|
int32_t bin_offset;
|
|
a3da_key_type type;
|
|
a3da_ep_type ep_type_pre;
|
|
a3da_ep_type ep_type_post;
|
|
std::vector<kft3> keys;
|
|
float_t max_frame;
|
|
bool raw_data;
|
|
bool raw_data_binary;
|
|
int32_t raw_data_value_list_size;
|
|
int32_t raw_data_value_list_offset;
|
|
float_t value;
|
|
|
|
a3da_key();
|
|
~a3da_key();
|
|
};
|
|
|
|
struct a3da_rgba {
|
|
a3da_rgba_flags flags;
|
|
a3da_key r;
|
|
a3da_key g;
|
|
a3da_key b;
|
|
a3da_key a;
|
|
|
|
a3da_rgba();
|
|
~a3da_rgba();
|
|
};
|
|
|
|
struct a3da_vec3 {
|
|
a3da_key x;
|
|
a3da_key y;
|
|
a3da_key z;
|
|
|
|
a3da_vec3();
|
|
~a3da_vec3();
|
|
};
|
|
|
|
struct a3da_model_transform {
|
|
a3da_model_transform_flags flags;
|
|
int32_t bin_offset;
|
|
a3da_vec3 rotation;
|
|
a3da_vec3 scale;
|
|
a3da_vec3 translation;
|
|
a3da_key visibility;
|
|
|
|
a3da_model_transform();
|
|
~a3da_model_transform();
|
|
};
|
|
|
|
struct a3da_ambient {
|
|
a3da_ambient_flags flags;
|
|
a3da_rgba light_diffuse;
|
|
std::string name;
|
|
a3da_rgba rim_light_diffuse;
|
|
|
|
a3da_ambient();
|
|
~a3da_ambient();
|
|
};
|
|
|
|
struct a3da_camera_auxiliary {
|
|
a3da_camera_auxiliary_flags flags;
|
|
a3da_key auto_exposure;
|
|
a3da_key exposure;
|
|
a3da_key exposure_rate;
|
|
a3da_key gamma;
|
|
a3da_key gamma_rate;
|
|
a3da_key saturate;
|
|
|
|
a3da_camera_auxiliary();
|
|
~a3da_camera_auxiliary();
|
|
};
|
|
|
|
struct a3da_camera_root_view_point {
|
|
a3da_camera_root_view_point_flags flags;
|
|
float_t aspect;
|
|
float_t camera_aperture_h;
|
|
float_t camera_aperture_w;
|
|
a3da_key focal_length;
|
|
a3da_key fov;
|
|
bool fov_is_horizontal;
|
|
a3da_model_transform model_transform;
|
|
a3da_key roll;
|
|
|
|
a3da_camera_root_view_point();
|
|
~a3da_camera_root_view_point();
|
|
};
|
|
|
|
struct a3da_camera_root {
|
|
a3da_model_transform interest;
|
|
a3da_model_transform model_transform;
|
|
a3da_camera_root_view_point view_point;
|
|
|
|
a3da_camera_root();
|
|
~a3da_camera_root();
|
|
};
|
|
|
|
struct a3da_chara {
|
|
a3da_model_transform model_transform;
|
|
std::string name;
|
|
|
|
a3da_chara();
|
|
~a3da_chara();
|
|
};
|
|
|
|
struct a3da_curve {
|
|
a3da_key curve;
|
|
std::string name;
|
|
|
|
a3da_curve();
|
|
~a3da_curve();
|
|
};
|
|
|
|
struct a3da_dof {
|
|
bool has_dof;
|
|
a3da_model_transform model_transform;
|
|
|
|
a3da_dof();
|
|
~a3da_dof();
|
|
};
|
|
|
|
struct a3da_event {
|
|
float_t begin;
|
|
float_t clip_begin;
|
|
float_t clip_end;
|
|
float_t end;
|
|
std::string name;
|
|
std::string param1;
|
|
std::string ref;
|
|
float_t time_ref_scale;
|
|
a3da_event_type type;
|
|
|
|
a3da_event();
|
|
~a3da_event();
|
|
};
|
|
|
|
struct a3da_fog {
|
|
a3da_fog_flags flags;
|
|
a3da_rgba color;
|
|
a3da_key density;
|
|
a3da_key end;
|
|
fog_id id;
|
|
a3da_key start;
|
|
|
|
a3da_fog();
|
|
~a3da_fog();
|
|
};
|
|
|
|
struct a3da_light {
|
|
a3da_light_flags flags;
|
|
a3da_rgba ambient;
|
|
a3da_key cone_angle;
|
|
a3da_key constant;
|
|
a3da_rgba diffuse;
|
|
a3da_key drop_off;
|
|
a3da_key _far;
|
|
light_id id;
|
|
a3da_key intensity;
|
|
a3da_key linear;
|
|
a3da_model_transform position;
|
|
a3da_key quadratic;
|
|
a3da_rgba specular;
|
|
a3da_model_transform spot_direction;
|
|
a3da_rgba tone_curve;
|
|
std::string type;
|
|
|
|
a3da_light();
|
|
~a3da_light();
|
|
};
|
|
|
|
struct a3da_m_object_hrc {
|
|
std::vector<a3da_object_instance> instance;
|
|
a3da_model_transform model_transform;
|
|
std::string name;
|
|
std::vector<a3da_object_node> node;
|
|
|
|
a3da_m_object_hrc();
|
|
~a3da_m_object_hrc();
|
|
};
|
|
|
|
struct a3da_material_list {
|
|
a3da_material_list_flags flags;
|
|
a3da_rgba blend_color;
|
|
a3da_key glow_intensity;
|
|
a3da_rgba incandescence;
|
|
std::string name;
|
|
|
|
a3da_material_list();
|
|
~a3da_material_list();
|
|
};
|
|
|
|
struct a3da_object {
|
|
a3da_model_transform model_transform;
|
|
std::string morph;
|
|
float_t morph_offset;
|
|
std::string name;
|
|
std::string parent_name;
|
|
std::string parent_node;
|
|
std::string pattern;
|
|
float_t pattern_offset;
|
|
std::vector<a3da_object_texture_pattern> texture_pattern;
|
|
std::vector<a3da_object_texture_transform> texture_transform;
|
|
std::string uid_name;
|
|
|
|
a3da_object();
|
|
~a3da_object();
|
|
};
|
|
|
|
struct a3da_object_hrc {
|
|
std::string name;
|
|
std::vector<a3da_object_node> node;
|
|
std::string parent_name;
|
|
std::string parent_node;
|
|
bool shadow;
|
|
std::string uid_name;
|
|
|
|
a3da_object_hrc();
|
|
~a3da_object_hrc();
|
|
};
|
|
|
|
struct a3da_object_instance {
|
|
a3da_model_transform model_transform;
|
|
std::string name;
|
|
bool shadow;
|
|
std::string uid_name;
|
|
|
|
a3da_object_instance();
|
|
~a3da_object_instance();
|
|
};
|
|
|
|
struct a3da_object_node {
|
|
a3da_object_node_flags flags;
|
|
vec3 joint_orient;
|
|
a3da_model_transform model_transform;
|
|
std::string name;
|
|
int32_t parent;
|
|
|
|
a3da_object_node();
|
|
~a3da_object_node();
|
|
};
|
|
|
|
struct a3da_object_texture_pattern {
|
|
std::string name;
|
|
std::string pattern;
|
|
float_t pattern_offset;
|
|
|
|
a3da_object_texture_pattern();
|
|
~a3da_object_texture_pattern();
|
|
};
|
|
|
|
struct a3da_object_texture_transform {
|
|
a3da_object_texture_transform_flags flags;
|
|
a3da_key coverage_u;
|
|
a3da_key coverage_v;
|
|
std::string name;
|
|
a3da_key offset_u;
|
|
a3da_key offset_v;
|
|
a3da_key repeat_u;
|
|
a3da_key repeat_v;
|
|
a3da_key rotate;
|
|
a3da_key rotate_frame;
|
|
a3da_key translate_frame_u;
|
|
a3da_key translate_frame_v;
|
|
|
|
a3da_object_texture_transform();
|
|
~a3da_object_texture_transform();
|
|
};
|
|
|
|
struct a3da_play_control {
|
|
a3da_play_control_flags flags;
|
|
float_t begin;
|
|
int32_t div;
|
|
float_t fps;
|
|
float_t offset;
|
|
float_t size;
|
|
|
|
a3da_play_control();
|
|
~a3da_play_control();
|
|
};
|
|
|
|
struct a3da_point {
|
|
a3da_model_transform model_transform;
|
|
std::string name;
|
|
|
|
a3da_point();
|
|
~a3da_point();
|
|
};
|
|
|
|
struct a3da_post_process {
|
|
a3da_post_process_flags flags;
|
|
a3da_rgba intensity;
|
|
a3da_key lens_flare;
|
|
a3da_key lens_ghost;
|
|
a3da_key lens_shaft;
|
|
a3da_rgba radius;
|
|
a3da_rgba scene_fade;
|
|
|
|
a3da_post_process();
|
|
~a3da_post_process();
|
|
};
|
|
|
|
struct a3da {
|
|
bool ready;
|
|
bool compressed;
|
|
a3da_format format;
|
|
|
|
a3da_compress_f16 _compress_f16;
|
|
std::string _file_name;
|
|
std::string _property_version;
|
|
std::string _converter_version;
|
|
|
|
std::vector<a3da_ambient> ambient;
|
|
std::vector<std::string> auth_2d;
|
|
a3da_camera_auxiliary camera_auxiliary;
|
|
std::vector<a3da_camera_root> camera_root;
|
|
std::vector<a3da_chara> chara;
|
|
std::vector<a3da_curve> curve;
|
|
a3da_dof dof;
|
|
std::vector<a3da_event> event;
|
|
std::vector<a3da_fog> fog;
|
|
std::vector<a3da_light> light;
|
|
std::vector<a3da_m_object_hrc> m_object_hrc;
|
|
std::vector<std::string> m_object_hrc_list;
|
|
std::vector<a3da_material_list> material_list;
|
|
std::vector<std::string> motion;
|
|
std::vector<a3da_object> object;
|
|
std::vector<a3da_object_hrc> object_hrc;
|
|
std::vector<std::string> object_hrc_list;
|
|
std::vector<std::string> object_list;
|
|
a3da_play_control play_control;
|
|
std::vector<a3da_point> point;
|
|
a3da_post_process post_process;
|
|
|
|
a3da();
|
|
virtual ~a3da();
|
|
|
|
void read(const char* path);
|
|
void read(const wchar_t* path);
|
|
void read(const void* data, size_t size);
|
|
void write(const char* path);
|
|
void write(const wchar_t* path);
|
|
void write(void** data, size_t* size);
|
|
|
|
static bool load_file(void* data, const char* path, const char* file, uint32_t hash);
|
|
};
|