mirror of
https://github.com/korenkonder/ReDIVA.git
synced 2026-10-13 09:38:14 +03:00
2998 lines
101 KiB
C++
2998 lines
101 KiB
C++
/*
|
||
by korenkonder
|
||
GitHub/GitLab: korenkonder
|
||
*/
|
||
|
||
#include "dsc.hpp"
|
||
#include "f2/struct.hpp"
|
||
#include "hash.hpp"
|
||
#include "sort.hpp"
|
||
#include "str_utils.h"
|
||
|
||
static const dsc_func dsc_ac101_func[] = {
|
||
{ 0, 0, "END" },
|
||
{ 1, 1, "TIME" },
|
||
{ 2, 3, "MIKU_MOVE" },
|
||
{ 3, 1, "MIKU_ROT" },
|
||
{ 4, 1, "MIKU_DISP" },
|
||
{ 5, 1, "MIKU_SHADOW" },
|
||
{ 6, 7, "TARGET" },
|
||
{ 7, 3, "SET_MOTION" },
|
||
{ 8, 1, "SET_PLAYDATA" },
|
||
{ 9, 5, "EFFECT" },
|
||
{ 10, 2, "FADEIN_FIELD" },
|
||
{ 11, 1, "EFFECT_OFF" },
|
||
{ 12, 6, "SET_CAMERA" },
|
||
{ 13, 2, "DATA_CAMERA" },
|
||
{ 14, 1, "CHANGE_FIELD" },
|
||
{ 15, 1, "HIDE_FIELD" },
|
||
{ 16, 3, "MOVE_FIELD" },
|
||
{ 17, 2, "FADEOUT_FIELD" },
|
||
{ 18, 2, "EYE_ANIM" },
|
||
{ 19, 3, "MOUTH_ANIM" },
|
||
{ 20, 4, "HAND_ANIM" },
|
||
{ 21, 3, "LOOK_ANIM" },
|
||
{ 22, 3, "EXPRESSION" },
|
||
{ 23, 4, "LOOK_CAMERA" },
|
||
{ 24, 1, "LYRIC" },
|
||
{ 25, 0, "MUSIC_PLAY" },
|
||
{ 26, 1, "MODE_SELECT" },
|
||
{ 27, 2, "EDIT_MOTION" },
|
||
{ 28, 2, "BAR_TIME_SET" },
|
||
{ 29, 1, "SHADOWHEIGHT" },
|
||
{ 30, 2, "EDIT_FACE" },
|
||
{ 31, 19, "MOVE_CAMERA" },
|
||
{ 32, 0, "PV_END" },
|
||
{ 33, 2, "SHADOWPOS" },
|
||
{ 34, 2, "NEAR_CLIP" },
|
||
{ 35, 1, "CLOTH_WET" },
|
||
{ 36, 6, "SCENE_FADE" }, // AC110
|
||
{ 37, 6, "TONE_TRANS" }, // AC120
|
||
{ 38, 1, "SATURATE" },
|
||
{ 39, 1, "FADE_MODE" },
|
||
};
|
||
|
||
static const dsc_func_ac dsc_ac_func[] = {
|
||
{ 0, 0, 0, "END" },
|
||
{ 1, 1, 1, "TIME" },
|
||
{ 2, 3, 4, "MIKU_MOVE" },
|
||
{ 3, 1, 2, "MIKU_ROT" },
|
||
{ 4, 1, 2, "MIKU_DISP" },
|
||
{ 5, 1, 2, "MIKU_SHADOW" },
|
||
{ 6, 7, 7, "TARGET" },
|
||
{ 7, 3, 4, "SET_MOTION" },
|
||
{ 8, 1, 2, "SET_PLAYDATA" },
|
||
{ 9, 5, 6, "EFFECT" },
|
||
{ 10, 2, 2, "FADEIN_FIELD" },
|
||
{ 11, 1, 1, "EFFECT_OFF" },
|
||
{ 12, 6, 6, "SET_CAMERA" },
|
||
{ 13, 2, 2, "DATA_CAMERA" },
|
||
{ 14, 1, 1, "CHANGE_FIELD" },
|
||
{ 15, 1, 1, "HIDE_FIELD" },
|
||
{ 16, 3, 3, "MOVE_FIELD" },
|
||
{ 17, 2, 2, "FADEOUT_FIELD" },
|
||
{ 18, 2, 3, "EYE_ANIM" },
|
||
{ 19, 3, 5, "MOUTH_ANIM" },
|
||
{ 20, 4, 5, "HAND_ANIM" },
|
||
{ 21, 3, 4, "LOOK_ANIM" },
|
||
{ 22, 3, 4, "EXPRESSION" },
|
||
{ 23, 4, 5, "LOOK_CAMERA" },
|
||
{ 24, 1, 2, "LYRIC" },
|
||
{ 25, 0, 0, "MUSIC_PLAY" },
|
||
{ 26, 1, 2, "MODE_SELECT" },
|
||
{ 27, 2, 4, "EDIT_MOTION" },
|
||
{ 28, 2, 2, "BAR_TIME_SET" },
|
||
{ 29, 1, 2, "SHADOWHEIGHT" },
|
||
{ 30, 2, 1, "EDIT_FACE" },
|
||
{ 31, 19, 21, "MOVE_CAMERA" },
|
||
{ 32, 0, 0, "PV_END" },
|
||
{ 33, 2, 3, "SHADOWPOS" },
|
||
{ 34, 2, 2, "EDIT_LYRIC" },
|
||
{ 35, 5, 5, "EDIT_TARGET" },
|
||
{ 36, 1, 1, "EDIT_MOUTH" },
|
||
{ 37, 1, 1, "SET_CHARA" },
|
||
{ 38, 7, 7, "EDIT_MOVE" },
|
||
{ 39, 1, 1, "EDIT_SHADOW" },
|
||
{ 40, 1, 1, "EDIT_EYELID" },
|
||
{ 41, 2, 2, "EDIT_EYE" },
|
||
{ 42, 1, 1, "EDIT_ITEM" },
|
||
{ 43, 2, 2, "EDIT_EFFECT" },
|
||
{ 44, 1, 1, "EDIT_DISP" },
|
||
{ 45, 2, 2, "EDIT_HAND_ANIM" },
|
||
{ 46, 3, 3, "AIM" },
|
||
{ 47, 3, 3, "HAND_ITEM" },
|
||
{ 48, 1, 1, "EDIT_BLUSH" },
|
||
{ 49, 2, 2, "NEAR_CLIP" },
|
||
{ 50, 1, 2, "CLOTH_WET" },
|
||
{ 51, 3, 3, "LIGHT_ROT" },
|
||
{ 52, 6, 6, "SCENE_FADE" },
|
||
{ 53, 6, 6, "TONE_TRANS" },
|
||
{ 54, 1, 1, "SATURATE" },
|
||
{ 55, 1, 1, "FADE_MODE" },
|
||
{ 56, 2, 2, "AUTO_BLINK" },
|
||
{ 57, 3, 3, "PARTS_DISP" },
|
||
{ 58, 1, 1, "TARGET_FLYING_TIME" }, // AC210
|
||
{ 59, 2, 2, "CHARA_SIZE" },
|
||
{ 60, 2, 2, "CHARA_HEIGHT_ADJUST" },
|
||
{ 61, 4, 4, "ITEM_ANIM" },
|
||
{ 62, 4, 4, "CHARA_POS_ADJUST" },
|
||
{ 63, 1, 1, "SCENE_ROT" },
|
||
{ 64, 2, 2, "EDIT_MOT_SMOOTH_LEN" }, // AC500
|
||
{ 65, 1, 1, "PV_BRANCH_MODE" }, // AC510
|
||
{ 66, 2, 2, "DATA_CAMERA_START" },
|
||
{ 67, 1, 1, "MOVIE_PLAY" },
|
||
{ 68, 1, 1, "MOVIE_DISP" },
|
||
{ 69, 3, 3, "WIND" },
|
||
{ 70, 3, 3, "OSAGE_STEP" },
|
||
{ 71, 3, 3, "OSAGE_MV_CCL" },
|
||
{ 72, 2, 2, "CHARA_COLOR" },
|
||
{ 73, 1, 1, "SE_EFFECT" },
|
||
{ 74, 9, 9, "EDIT_MOVE_XYZ" },
|
||
{ 75, 3, 3, "EDIT_EYELID_ANIM" },
|
||
{ 76, 2, 2, "EDIT_INSTRUMENT_ITEM" },
|
||
{ 77, 4, 4, "EDIT_MOTION_LOOP" },
|
||
{ 78, 2, 2, "EDIT_EXPRESSION" },
|
||
{ 79, 3, 3, "EDIT_EYE_ANIM" },
|
||
{ 80, 2, 2, "EDIT_MOUTH_ANIM" },
|
||
{ 81, 24, 24, "EDIT_CAMERA" },
|
||
{ 82, 1, 1, "EDIT_MODE_SELECT" },
|
||
{ 83, 2, 2, "PV_END_FADEOUT" },
|
||
{ 84, 1, 1, "TARGET_FLAG" },
|
||
{ 85, 3, 3, "ITEM_ANIM_ATTACH" },
|
||
{ 86, 1, 1, "SHADOW_RANGE" },
|
||
{ 87, 3, 3, "HAND_SCALE" }, // AFT101
|
||
{ 88, 4, 4, "LIGHT_POS" },
|
||
{ 89, 1, 1, "FACE_TYPE" }, // AFT200
|
||
{ 90, 2, 2, "SHADOW_CAST" }, // AFT300
|
||
{ 91, 6, 6, "EDIT_MOTION_F" }, // AFT310
|
||
{ 92, 3, 3, "FOG" }, // AFT410
|
||
{ 93, 2, 2, "BLOOM" },
|
||
{ 94, 3, 3, "COLOR_COLLE" },
|
||
{ 95, 3, 3, "DOF" },
|
||
{ 96, 4, 4, "CHARA_ALPHA" },
|
||
{ 97, 1, 1, "AOTO_CAP" },
|
||
{ 98, 1, 1, "MAN_CAP" },
|
||
{ 99, 3, 3, "TOON" },
|
||
{ 100, 3, 3, "SHIMMER" },
|
||
{ 101, 4, 4, "ITEM_ALPHA" },
|
||
{ 102, 1, 1, "MOVIE_CUT_CHG" },
|
||
{ 103, 3, 3, "CHARA_LIGHT" },
|
||
{ 104, 3, 3, "STAGE_LIGHT" },
|
||
{ 105, 8, 8, "AGEAGE_CTR" }, // AFT701
|
||
{ 106, 2, 2, "PSE" }, // FT
|
||
};
|
||
|
||
static const dsc_func_ac dsc_f_func[] = {
|
||
{ 0, 0, 0, "END" },
|
||
{ 1, 1, 1, "TIME" },
|
||
{ 2, 3, 4, "MIKU_MOVE" },
|
||
{ 3, 1, 2, "MIKU_ROT" },
|
||
{ 4, 1, 2, "MIKU_DISP" },
|
||
{ 5, 1, 2, "MIKU_SHADOW" },
|
||
{ 6, 7, 11, "TARGET" },
|
||
{ 7, 3, 4, "SET_MOTION" },
|
||
{ 8, 1, 2, "SET_PLAYDATA" },
|
||
{ 9, 5, 6, "EFFECT" },
|
||
{ 10, 2, 2, "FADEIN_FIELD" },
|
||
{ 11, 1, 1, "EFFECT_OFF" },
|
||
{ 12, 6, 6, "SET_CAMERA" },
|
||
{ 13, 2, 2, "DATA_CAMERA" },
|
||
{ 14, 1, 1, "CHANGE_FIELD" },
|
||
{ 15, 1, 1, "HIDE_FIELD" },
|
||
{ 16, 3, 3, "MOVE_FIELD" },
|
||
{ 17, 2, 2, "FADEOUT_FIELD" },
|
||
{ 18, 2, 3, "EYE_ANIM" },
|
||
{ 19, 3, 5, "MOUTH_ANIM" },
|
||
{ 20, 4, 5, "HAND_ANIM" },
|
||
{ 21, 3, 4, "LOOK_ANIM" },
|
||
{ 22, 3, 4, "EXPRESSION" },
|
||
{ 23, 4, 5, "LOOK_CAMERA" },
|
||
{ 24, 1, 2, "LYRIC" },
|
||
{ 25, 0, 0, "MUSIC_PLAY" },
|
||
{ 26, 1, 2, "MODE_SELECT" },
|
||
{ 27, 2, 4, "EDIT_MOTION" },
|
||
{ 28, 2, 2, "BAR_TIME_SET" },
|
||
{ 29, 1, 2, "SHADOWHEIGHT" },
|
||
{ 30, 2, 1, "EDIT_FACE" },
|
||
{ 31, 19, 21, "MOVE_CAMERA" },
|
||
{ 32, 0, 0, "PV_END" },
|
||
{ 33, 2, 3, "SHADOWPOS" },
|
||
{ 34, 2, 2, "EDIT_LYRIC" },
|
||
{ 35, 5, 5, "EDIT_TARGET" },
|
||
{ 36, 1, 1, "EDIT_MOUTH" },
|
||
{ 37, 1, 1, "SET_CHARA" },
|
||
{ 38, 7, 7, "EDIT_MOVE" },
|
||
{ 39, 1, 1, "EDIT_SHADOW" },
|
||
{ 40, 1, 1, "EDIT_EYELID" },
|
||
{ 41, 2, 2, "EDIT_EYE" },
|
||
{ 42, 1, 1, "EDIT_ITEM" },
|
||
{ 43, 2, 2, "EDIT_EFFECT" },
|
||
{ 44, 1, 1, "EDIT_DISP" },
|
||
{ 45, 2, 2, "EDIT_HAND_ANIM" },
|
||
{ 46, 3, 3, "AIM" },
|
||
{ 47, 3, 3, "HAND_ITEM" },
|
||
{ 48, 1, 1, "EDIT_BLUSH" },
|
||
{ 49, 2, 2, "NEAR_CLIP" }, // DT 2nd
|
||
{ 50, 1, 2, "CLOTH_WET" },
|
||
{ 51, 3, 3, "LIGHT_ROT" },
|
||
{ 52, 6, 6, "SCENE_FADE" },
|
||
{ 53, 6, 6, "TONE_TRANS" },
|
||
{ 54, 1, 1, "SATURATE" },
|
||
{ 55, 1, 1, "FADE_MODE" },
|
||
{ 56, 2, 2, "AUTO_BLINK" },
|
||
{ 57, 3, 3, "PARTS_DISP" },
|
||
{ 58, 1, 1, "TARGET_FLYING_TIME" },
|
||
{ 59, 2, 2, "CHARA_SIZE" },
|
||
{ 60, 2, 2, "CHARA_HEIGHT_ADJUST" },
|
||
{ 61, 4, 4, "ITEM_ANIM" },
|
||
{ 62, 4, 4, "CHARA_POS_ADJUST" },
|
||
{ 63, 1, 1, "SCENE_ROT" },
|
||
{ 64, 2, 2, "EDIT_MOT_SMOOTH_LEN" }, // F
|
||
{ 65, 1, 1, "PV_BRANCH_MODE" },
|
||
{ 66, 2, 2, "DATA_CAMERA_START" },
|
||
{ 67, 1, 1, "MOVIE_PLAY" },
|
||
{ 68, 1, 1, "MOVIE_DISP" },
|
||
{ 69, 3, 3, "WIND" },
|
||
{ 70, 3, 3, "OSAGE_STEP" },
|
||
{ 71, 3, 3, "OSAGE_MV_CCL" },
|
||
{ 72, 2, 2, "CHARA_COLOR" },
|
||
{ 73, 1, 1, "SE_EFFECT" },
|
||
{ 74, 9, 9, "EDIT_MOVE_XYZ" },
|
||
{ 75, 3, 3, "EDIT_EYELID_ANIM" },
|
||
{ 76, 2, 2, "EDIT_INSTRUMENT_ITEM" },
|
||
{ 77, 4, 4, "EDIT_MOTION_LOOP" },
|
||
{ 78, 2, 2, "EDIT_EXPRESSION" },
|
||
{ 79, 3, 3, "EDIT_EYE_ANIM" },
|
||
{ 80, 2, 2, "EDIT_MOUTH_ANIM" },
|
||
{ 81, 24, 24, "EDIT_CAMERA" },
|
||
{ 82, 1, 1, "EDIT_MODE_SELECT" },
|
||
{ 83, 2, 2, "PV_END_FADEOUT" },
|
||
};
|
||
|
||
static const dsc_func dsc_f2_func[] = {
|
||
{ 0, 0, "END" },
|
||
{ 1, 1, "TIME" },
|
||
{ 2, 4, "MIKU_MOVE" },
|
||
{ 3, 2, "MIKU_ROT" },
|
||
{ 4, 2, "MIKU_DISP" },
|
||
{ 5, 2, "MIKU_SHADOW" },
|
||
{ 6, 12, "TARGET" },
|
||
{ 7, 4, "SET_MOTION" },
|
||
{ 8, 2, "SET_PLAYDATA" },
|
||
{ 9, 6, "EFFECT" },
|
||
{ 10, 2, "FADEIN_FIELD" },
|
||
{ 11, 1, "EFFECT_OFF" },
|
||
{ 12, 6, "SET_CAMERA" },
|
||
{ 13, 2, "DATA_CAMERA" },
|
||
{ 14, 2, "CHANGE_FIELD" },
|
||
{ 15, 1, "HIDE_FIELD" },
|
||
{ 16, 3, "MOVE_FIELD" },
|
||
{ 17, 2, "FADEOUT_FIELD" },
|
||
{ 18, 3, "EYE_ANIM" },
|
||
{ 19, 5, "MOUTH_ANIM" },
|
||
{ 20, 5, "HAND_ANIM" },
|
||
{ 21, 4, "LOOK_ANIM" },
|
||
{ 22, 4, "EXPRESSION" },
|
||
{ 23, 5, "LOOK_CAMERA" },
|
||
{ 24, 2, "LYRIC" },
|
||
{ 25, 0, "MUSIC_PLAY" },
|
||
{ 26, 2, "MODE_SELECT" },
|
||
{ 27, 4, "EDIT_MOTION" },
|
||
{ 28, 2, "BAR_TIME_SET" },
|
||
{ 29, 2, "SHADOWHEIGHT" },
|
||
{ 30, 1, "EDIT_FACE" },
|
||
{ 31, 21, "MOVE_CAMERA" },
|
||
{ 32, 0, "PV_END" },
|
||
{ 33, 3, "SHADOWPOS" },
|
||
{ 34, 2, "EDIT_LYRIC" },
|
||
{ 35, 5, "EDIT_TARGET" },
|
||
{ 36, 1, "EDIT_MOUTH" },
|
||
{ 37, 1, "SET_CHARA" },
|
||
{ 38, 7, "EDIT_MOVE" },
|
||
{ 39, 1, "EDIT_SHADOW" },
|
||
{ 40, 1, "EDIT_EYELID" },
|
||
{ 41, 2, "EDIT_EYE" },
|
||
{ 42, 1, "EDIT_ITEM" },
|
||
{ 43, 2, "EDIT_EFFECT" },
|
||
{ 44, 1, "EDIT_DISP" },
|
||
{ 45, 2, "EDIT_HAND_ANIM" },
|
||
{ 46, 3, "AIM" },
|
||
{ 47, 3, "HAND_ITEM" },
|
||
{ 48, 1, "EDIT_BLUSH" },
|
||
{ 49, 2, "NEAR_CLIP" },
|
||
{ 50, 2, "CLOTH_WET" },
|
||
{ 51, 3, "LIGHT_ROT" },
|
||
{ 52, 6, "SCENE_FADE" },
|
||
{ 53, 6, "TONE_TRANS" },
|
||
{ 54, 1, "SATURATE" },
|
||
{ 55, 1, "FADE_MODE" },
|
||
{ 56, 2, "AUTO_BLINK" },
|
||
{ 57, 3, "PARTS_DISP" },
|
||
{ 58, 1, "TARGET_FLYING_TIME" },
|
||
{ 59, 2, "CHARA_SIZE" },
|
||
{ 60, 2, "CHARA_HEIGHT_ADJUST" },
|
||
{ 61, 4, "ITEM_ANIM" },
|
||
{ 62, 4, "CHARA_POS_ADJUST" },
|
||
{ 63, 1, "SCENE_ROT" },
|
||
{ 64, 2, "EDIT_MOT_SMOOTH_LEN" },
|
||
{ 65, 1, "PV_BRANCH_MODE" },
|
||
{ 66, 2, "DATA_CAMERA_START" },
|
||
{ 67, 1, "MOVIE_PLAY" },
|
||
{ 68, 1, "MOVIE_DISP" },
|
||
{ 69, 3, "WIND" },
|
||
{ 70, 3, "OSAGE_STEP" },
|
||
{ 71, 3, "OSAGE_MV_CCL" },
|
||
{ 72, 2, "CHARA_COLOR" },
|
||
{ 73, 1, "SE_EFFECT" },
|
||
{ 74, 9, "EDIT_MOVE_XYZ" },
|
||
{ 75, 3, "EDIT_EYELID_ANIM" },
|
||
{ 76, 2, "EDIT_INSTRUMENT_ITEM" },
|
||
{ 77, 4, "EDIT_MOTION_LOOP" },
|
||
{ 78, 2, "EDIT_EXPRESSION" },
|
||
{ 79, 3, "EDIT_EYE_ANIM" },
|
||
{ 80, 2, "EDIT_MOUTH_ANIM" },
|
||
{ 81, 22, "EDIT_CAMERA" },
|
||
{ 82, 1, "EDIT_MODE_SELECT" },
|
||
{ 83, 2, "PV_END_FADEOUT" },
|
||
{ 84, 1, "RESERVE" },
|
||
{ 85, 6, "RESERVE" },
|
||
{ 86, 1, "RESERVE" },
|
||
{ 87, 9, "RESERVE" },
|
||
{ 88, 2, "PV_AUTH_LIGHT_PRIORITY" },
|
||
{ 89, 3, "PV_CHARA_LIGHT" },
|
||
{ 90, 3, "PV_STAGE_LIGHT" },
|
||
{ 91, 11, "TARGET_EFFECT" },
|
||
{ 92, 3, "FOG" },
|
||
{ 93, 2, "BLOOM" },
|
||
{ 94, 3, "COLOR_CORRECTION" },
|
||
{ 95, 3, "DOF" },
|
||
{ 96, 4, "CHARA_ALPHA" },
|
||
{ 97, 1, "AUTO_CAPTURE_BEGIN" },
|
||
{ 98, 1, "MANUAL_CAPTURE" },
|
||
{ 99, 3, "TOON_EDGE" },
|
||
{ 100, 3, "SHIMMER" },
|
||
{ 101, 4, "ITEM_ALPHA" },
|
||
{ 102, 1, "MOVIE_CUT" },
|
||
{ 103, 112, "EDIT_CAMERA_BOX" },
|
||
{ 104, 1, "EDIT_STAGE_PARAM" },
|
||
{ 105, 1, "EDIT_CHANGE_FIELD" },
|
||
{ 106, 7, "MIKUDAYO_ADJUST" },
|
||
{ 107, 2, "LYRIC_2" }, // US/EU
|
||
{ 108, 2, "LYRIC_READ" },
|
||
{ 109, 2, "LYRIC_READ_2" },
|
||
{ 110, 5, "ANNOTATION" },
|
||
};
|
||
|
||
static const dsc_func dsc_mgf_func[] = {
|
||
{ 0, 0, "END" },
|
||
{ 1, 1, "TIME" },
|
||
{ 2, 4, "MIKU_MOVE" },
|
||
{ 3, 2, "MIKU_ROT" },
|
||
{ 4, 2, "MIKU_DISP" },
|
||
{ 5, 2, "MIKU_SHADOW" },
|
||
{ 6, 12, "TARGET" },
|
||
{ 7, 4, "SET_MOTION" },
|
||
{ 8, 2, "SET_PLAYDATA" },
|
||
{ 9, 6, "EFFECT" },
|
||
{ 10, 2, "FADEIN_FIELD" },
|
||
{ 11, 1, "EFFECT_OFF" },
|
||
{ 12, 6, "SET_CAMERA" },
|
||
{ 13, 2, "DATA_CAMERA" },
|
||
{ 14, 2, "CHANGE_FIELD" },
|
||
{ 15, 1, "HIDE_FIELD" },
|
||
{ 16, 3, "MOVE_FIELD" },
|
||
{ 17, 2, "FADEOUT_FIELD" },
|
||
{ 18, 3, "EYE_ANIM" },
|
||
{ 19, 5, "MOUTH_ANIM" },
|
||
{ 20, 5, "HAND_ANIM" },
|
||
{ 21, 4, "LOOK_ANIM" },
|
||
{ 22, 4, "EXPRESSION" },
|
||
{ 23, 5, "LOOK_CAMERA" },
|
||
{ 24, 2, "LYRIC" },
|
||
{ 25, 0, "MUSIC_PLAY" },
|
||
{ 26, 2, "MODE_SELECT" },
|
||
{ 27, 4, "EDIT_MOTION" },
|
||
{ 28, 2, "BAR_TIME_SET" },
|
||
{ 29, 2, "SHADOWHEIGHT" },
|
||
{ 30, 1, "EDIT_FACE" },
|
||
{ 31, 21, "MOVE_CAMERA" },
|
||
{ 32, 0, "PV_END" },
|
||
{ 33, 3, "SHADOWPOS" },
|
||
{ 34, 2, "EDIT_LYRIC" },
|
||
{ 35, 5, "EDIT_TARGET" },
|
||
{ 36, 1, "EDIT_MOUTH" },
|
||
{ 37, 1, "SET_CHARA" },
|
||
{ 38, 7, "EDIT_MOVE" },
|
||
{ 39, 1, "EDIT_SHADOW" },
|
||
{ 40, 1, "EDIT_EYELID" },
|
||
{ 41, 2, "EDIT_EYE" },
|
||
{ 42, 1, "EDIT_ITEM" },
|
||
{ 43, 2, "EDIT_EFFECT" },
|
||
{ 44, 1, "EDIT_DISP" },
|
||
{ 45, 2, "EDIT_HAND_ANIM" },
|
||
{ 46, 3, "AIM" },
|
||
{ 47, 3, "HAND_ITEM" },
|
||
{ 48, 1, "EDIT_BLUSH" },
|
||
{ 49, 2, "NEAR_CLIP" },
|
||
{ 50, 2, "CLOTH_WET" },
|
||
{ 51, 3, "LIGHT_ROT" },
|
||
{ 52, 6, "SCENE_FADE" },
|
||
{ 53, 6, "TONE_TRANS" },
|
||
{ 54, 1, "SATURATE" },
|
||
{ 55, 1, "FADE_MODE" },
|
||
{ 56, 2, "AUTO_BLINK" },
|
||
{ 57, 3, "PARTS_DISP" },
|
||
{ 58, 1, "TARGET_FLYING_TIME" },
|
||
{ 59, 2, "CHARA_SIZE" },
|
||
{ 60, 2, "CHARA_HEIGHT_ADJUST" },
|
||
{ 61, 4, "ITEM_ANIM" },
|
||
{ 62, 4, "CHARA_POS_ADJUST" },
|
||
{ 63, 1, "SCENE_ROT" },
|
||
{ 64, 2, "EDIT_MOT_SMOOTH_LEN" },
|
||
{ 65, 1, "PV_BRANCH_MODE" },
|
||
{ 66, 2, "DATA_CAMERA_START" },
|
||
{ 67, 1, "MOVIE_PLAY" },
|
||
{ 68, 1, "MOVIE_DISP" },
|
||
{ 69, 3, "WIND" },
|
||
{ 70, 3, "OSAGE_STEP" },
|
||
{ 71, 3, "OSAGE_MV_CCL" },
|
||
{ 72, 2, "CHARA_COLOR" },
|
||
{ 73, 1, "SE_EFFECT" },
|
||
{ 74, 9, "EDIT_MOVE_XYZ" },
|
||
{ 75, 3, "EDIT_EYELID_ANIM" },
|
||
{ 76, 2, "EDIT_INSTRUMENT_ITEM" },
|
||
{ 77, 4, "EDIT_MOTION_LOOP" },
|
||
{ 78, 2, "EDIT_EXPRESSION" },
|
||
{ 79, 3, "EDIT_EYE_ANIM" },
|
||
{ 80, 2, "EDIT_MOUTH_ANIM" },
|
||
{ 81, 22, "EDIT_CAMERA" },
|
||
{ 82, 1, "EDIT_MODE_SELECT" },
|
||
{ 83, 2, "PV_END_FADEOUT" },
|
||
{ 84, 1, "RESERVE" },
|
||
{ 85, 6, "RESERVE" },
|
||
{ 86, 1, "RESERVE" },
|
||
{ 87, 9, "RESERVE" },
|
||
{ 88, 2, "PV_AUTH_LIGHT_PRIORITY" },
|
||
{ 89, 3, "PV_CHARA_LIGHT" },
|
||
{ 90, 3, "PV_STAGE_LIGHT" },
|
||
{ 91, 11, "TARGET_EFFECT" },
|
||
{ 92, 3, "FOG" },
|
||
{ 93, 2, "BLOOM" },
|
||
{ 94, 3, "COLOR_CORRECTION" },
|
||
{ 95, 3, "DOF" },
|
||
{ 96, 4, "CHARA_ALPHA" },
|
||
{ 97, 1, "AUTO_CAPTURE_BEGIN" },
|
||
{ 98, 1, "MANUAL_CAPTURE" },
|
||
{ 99, 3, "TOON_EDGE" },
|
||
{ 100, 3, "SHIMMER" },
|
||
{ 101, 4, "ITEM_ALPHA" },
|
||
{ 102, 1, "MOVIE_CUT" },
|
||
{ 103, 1, "CROSSFADE" },
|
||
{ 104, 1, "SUBFRAMERENDER" },
|
||
{ 105, 36, "EVENT_JUDGE" },
|
||
{ 106, 2, "TOON_EDGE" },
|
||
{ 107, 2, "FOG_ENABLE" },
|
||
{ 108, 112, "EDIT_CAMERA_BOX" },
|
||
{ 109, 1, "EDIT_STAGE_PARAM" },
|
||
{ 110, 1, "EDIT_CHANGE_FIELD" },
|
||
};
|
||
|
||
static const dsc_func dsc_x_func[] = {
|
||
{ 0, 0, "END" },
|
||
{ 1, 1, "TIME" },
|
||
{ 2, 4, "MIKU_MOVE" },
|
||
{ 3, 2, "MIKU_ROT" },
|
||
{ 4, 2, "MIKU_DISP" },
|
||
{ 5, 2, "MIKU_SHADOW" },
|
||
{ 6, 12, "TARGET" },
|
||
{ 7, 4, "SET_MOTION" },
|
||
{ 8, 2, "SET_PLAYDATA" },
|
||
{ 9, 6, "EFFECT" },
|
||
{ 10, 2, "FADEIN_FIELD" },
|
||
{ 11, 1, "EFFECT_OFF" },
|
||
{ 12, 6, "SET_CAMERA" },
|
||
{ 13, 2, "DATA_CAMERA" },
|
||
{ 14, 2, "CHANGE_FIELD" },
|
||
{ 15, 1, "HIDE_FIELD" },
|
||
{ 16, 3, "MOVE_FIELD" },
|
||
{ 17, 2, "FADEOUT_FIELD" },
|
||
{ 18, 3, "EYE_ANIM" },
|
||
{ 19, 5, "MOUTH_ANIM" },
|
||
{ 20, 5, "HAND_ANIM" },
|
||
{ 21, 4, "LOOK_ANIM" },
|
||
{ 22, 4, "EXPRESSION" },
|
||
{ 23, 5, "LOOK_CAMERA" },
|
||
{ 24, 2, "LYRIC" },
|
||
{ 25, 0, "MUSIC_PLAY" },
|
||
{ 26, 2, "MODE_SELECT" },
|
||
{ 27, 4, "EDIT_MOTION" },
|
||
{ 28, 2, "BAR_TIME_SET" },
|
||
{ 29, 2, "SHADOWHEIGHT" },
|
||
{ 30, 1, "EDIT_FACE" },
|
||
{ 31, 21, "DUMMY" },
|
||
{ 32, 0, "PV_END" },
|
||
{ 33, 3, "SHADOWPOS" },
|
||
{ 34, 2, "EDIT_LYRIC" },
|
||
{ 35, 5, "EDIT_TARGET" },
|
||
{ 36, 1, "EDIT_MOUTH" },
|
||
{ 37, 1, "SET_CHARA" },
|
||
{ 38, 7, "EDIT_MOVE" },
|
||
{ 39, 1, "EDIT_SHADOW" },
|
||
{ 40, 1, "EDIT_EYELID" },
|
||
{ 41, 2, "EDIT_EYE" },
|
||
{ 42, 1, "EDIT_ITEM" },
|
||
{ 43, 2, "EDIT_EFFECT" },
|
||
{ 44, 1, "EDIT_DISP" },
|
||
{ 45, 2, "EDIT_HAND_ANIM" },
|
||
{ 46, 3, "AIM" },
|
||
{ 47, 3, "HAND_ITEM" },
|
||
{ 48, 1, "EDIT_BLUSH" },
|
||
{ 49, 2, "NEAR_CLIP" },
|
||
{ 50, 2, "CLOTH_WET" },
|
||
{ 51, 3, "LIGHT_ROT" },
|
||
{ 52, 6, "SCENE_FADE" },
|
||
{ 53, 6, "TONE_TRANS" },
|
||
{ 54, 1, "SATURATE" },
|
||
{ 55, 1, "FADE_MODE" },
|
||
{ 56, 2, "AUTO_BLINK" },
|
||
{ 57, 3, "PARTS_DISP" },
|
||
{ 58, 1, "TARGET_FLYING_TIME" },
|
||
{ 59, 2, "CHARA_SIZE" },
|
||
{ 60, 2, "CHARA_HEIGHT_ADJUST" },
|
||
{ 61, 4, "ITEM_ANIM" },
|
||
{ 62, 4, "CHARA_POS_ADJUST" },
|
||
{ 63, 1, "SCENE_ROT" },
|
||
{ 64, 2, "EDIT_MOT_SMOOTH_LEN" },
|
||
{ 65, 1, "PV_BRANCH_MODE" },
|
||
{ 66, 2, "DATA_CAMERA_START" },
|
||
{ 67, 1, "MOVIE_PLAY" },
|
||
{ 68, 1, "MOVIE_DISP" },
|
||
{ 69, 3, "WIND" },
|
||
{ 70, 3, "OSAGE_STEP" },
|
||
{ 71, 3, "OSAGE_MV_CCL" },
|
||
{ 72, 2, "CHARA_COLOR" },
|
||
{ 73, 1, "SE_EFFECT" },
|
||
{ 74, 2, "CHARA_SHADOW_QUALITY" },
|
||
{ 75, 2, "STAGE_SHADOW_QUALITY" },
|
||
{ 76, 2, "COMMON_LIGHT" },
|
||
{ 77, 2, "TONE_MAP" },
|
||
{ 78, 2, "IBL_COLOR" },
|
||
{ 79, 2, "REFLECTION" },
|
||
{ 80, 3, "CHROMATIC_ABERRATION" },
|
||
{ 81, 2, "STAGE_SHADOW" },
|
||
{ 82, 2, "REFLECTION_QUALITY" },
|
||
{ 83, 2, "PV_END_FADEOUT" },
|
||
{ 84, 1, "CREDIT_TITLE" },
|
||
{ 85, 1, "BAR_POINT" },
|
||
{ 86, 1, "BEAT_POINT" },
|
||
{ 87, 0, "RESERVE" },
|
||
{ 88, 2, "PV_AUTH_LIGHT_PRIORITY" },
|
||
{ 89, 3, "PV_CHARA_LIGHT" },
|
||
{ 90, 3, "PV_STAGE_LIGHT" },
|
||
{ 91, 11, "TARGET_EFFECT" },
|
||
{ 92, 3, "FOG" },
|
||
{ 93, 2, "BLOOM" },
|
||
{ 94, 3, "COLOR_CORRECTION" },
|
||
{ 95, 3, "DOF" },
|
||
{ 96, 4, "CHARA_ALPHA" },
|
||
{ 97, 1, "AUTO_CAPTURE_BEGIN" },
|
||
{ 98, 1, "MANUAL_CAPTURE" },
|
||
{ 99, 3, "TOON_EDGE" },
|
||
{ 100, 3, "SHIMMER" },
|
||
{ 101, 4, "ITEM_ALPHA" },
|
||
{ 102, 1, "MOVIE_CUT" },
|
||
{ 103, 112, "EDIT_CAMERA_BOX" },
|
||
{ 104, 1, "EDIT_STAGE_PARAM" },
|
||
{ 105, 1, "EDIT_CHANGE_FIELD" },
|
||
{ 106, 7, "MIKUDAYO_ADJUST" },
|
||
{ 107, 2, "LYRIC_2" },
|
||
{ 108, 2, "LYRIC_READ" },
|
||
{ 109, 2, "LYRIC_READ_2" },
|
||
{ 110, 5, "ANNOTATION" },
|
||
{ 111, 2, "STAGE_EFFECT" },
|
||
{ 112, 3, "SONG_EFFECT" },
|
||
{ 113, 3, "SONG_EFFECT_ATTACH" },
|
||
{ 114, 2, "LIGHT_AUTH" },
|
||
{ 115, 2, "FADE" },
|
||
{ 116, 2, "SET_STAGE_EFFECT_ENV" },
|
||
{ 117, 2, "RESERVE" },
|
||
{ 118, 2, "COMMON_EFFECT_AET_FRONT" },
|
||
{ 119, 2, "COMMON_EFFECT_AET_FRONT_LOW" },
|
||
{ 120, 2, "COMMON_EFFECT_PARTICLE" },
|
||
{ 121, 3, "SONG_EFFECT_ALPHA_SORT" },
|
||
{ 122, 5, "LOOK_CAMERA_FACE_LIMIT" },
|
||
{ 123, 3, "ITEM_LIGHT" },
|
||
{ 124, 3, "CHARA_EFFECT" },
|
||
{ 125, 2, "MARKER" },
|
||
{ 126, 3, "CHARA_EFFECT_CHARA_LIGHT" },
|
||
{ 127, 2, "ENABLE_COMMON_LIGHT_TO_CHARA" },
|
||
{ 128, 2, "ENABLE_FXAA" },
|
||
{ 129, 2, "ENABLE_TEMPORAL_AA" },
|
||
{ 130, 2, "ENABLE_REFLECTION" },
|
||
{ 131, 2, "BANK_BRANCH" },
|
||
{ 132, 2, "BANK_END" },
|
||
{ 133, 2, "" },
|
||
{ 134, 2, "" },
|
||
{ 135, 2, "" },
|
||
{ 136, 2, "" },
|
||
{ 137, 2, "" },
|
||
{ 138, 2, "" },
|
||
{ 139, 2, "" },
|
||
{ 140, 2, "" },
|
||
{ 141, 2, "VR_LIVE_MOVIE" },
|
||
{ 142, 2, "VR_CHEER" },
|
||
{ 143, 2, "VR_CHARA_PSMOVE" },
|
||
{ 144, 2, "VR_MOVE_PATH" },
|
||
{ 145, 2, "VR_SET_BASE" },
|
||
{ 146, 2, "VR_TECH_DEMO_EFFECT" },
|
||
{ 147, 2, "VR_TRANSFORM" },
|
||
{ 148, 2, "GAZE" },
|
||
{ 149, 2, "TECH_DEMO_GESUTRE" },
|
||
{ 150, 2, "VR_CHEMICAL_LIGHT_COLOR" },
|
||
{ 151, 5, "VR_LIVE_MOB" },
|
||
{ 152, 9, "VR_LIVE_HAIR_OSAGE" },
|
||
{ 153, 9, "VR_LIVE_LOOK_CAMERA" },
|
||
{ 154, 5, "VR_LIVE_CHEER" },
|
||
{ 155, 3, "VR_LIVE_GESTURE" },
|
||
{ 156, 7, "VR_LIVE_CLONE" },
|
||
{ 157, 7, "VR_LOOP_EFFECT" },
|
||
{ 158, 6, "VR_LIVE_ONESHOT_EFFECT" },
|
||
{ 159, 9, "VR_LIVE_PRESENT" },
|
||
{ 160, 5, "VR_LIVE_TRANSFORM" },
|
||
{ 161, 5, "VR_LIVE_FLY" },
|
||
{ 162, 2, "VR_LIVE_CHARA_VOICE" },
|
||
};
|
||
|
||
static const dsc_func dsc_vrfl_func[] = {
|
||
{ 0, 0, "END" },
|
||
{ 1, 1, "TIME" },
|
||
{ 2, 4, "MIKU_MOVE" },
|
||
{ 3, 2, "MIKU_ROT" },
|
||
{ 4, 2, "MIKU_DISP" },
|
||
{ 5, 2, "MIKU_SHADOW" },
|
||
{ 6, 12, "TARGET" },
|
||
{ 7, 4, "SET_MOTION" },
|
||
{ 8, 2, "SET_PLAYDATA" },
|
||
{ 9, 6, "EFFECT" },
|
||
{ 10, 2, "FADEIN_FIELD" },
|
||
{ 11, 1, "EFFECT_OFF" },
|
||
{ 12, 6, "SET_CAMERA" },
|
||
{ 13, 2, "DATA_CAMERA" },
|
||
{ 14, 2, "CHANGE_FIELD" },
|
||
{ 15, 1, "HIDE_FIELD" },
|
||
{ 16, 3, "MOVE_FIELD" },
|
||
{ 17, 2, "FADEOUT_FIELD" },
|
||
{ 18, 3, "EYE_ANIM" },
|
||
{ 19, 5, "MOUTH_ANIM" },
|
||
{ 20, 5, "HAND_ANIM" },
|
||
{ 21, 4, "LOOK_ANIM" },
|
||
{ 22, 4, "EXPRESSION" },
|
||
{ 23, 5, "LOOK_CAMERA" },
|
||
{ 24, 2, "LYRIC" },
|
||
{ 25, 0, "MUSIC_PLAY" },
|
||
{ 26, 2, "MODE_SELECT" },
|
||
{ 27, 4, "EDIT_MOTION" },
|
||
{ 28, 2, "BAR_TIME_SET" },
|
||
{ 29, 2, "SHADOWHEIGHT" },
|
||
{ 30, 1, "EDIT_FACE" },
|
||
{ 31, 21, "DUMMY" },
|
||
{ 32, 0, "PV_END" },
|
||
{ 33, 3, "SHADOWPOS" },
|
||
{ 34, 2, "EDIT_LYRIC" },
|
||
{ 35, 5, "EDIT_TARGET" },
|
||
{ 36, 1, "EDIT_MOUTH" },
|
||
{ 37, 1, "SET_CHARA" },
|
||
{ 38, 7, "EDIT_MOVE" },
|
||
{ 39, 1, "EDIT_SHADOW" },
|
||
{ 40, 1, "EDIT_EYELID" },
|
||
{ 41, 2, "EDIT_EYE" },
|
||
{ 42, 1, "EDIT_ITEM" },
|
||
{ 43, 2, "EDIT_EFFECT" },
|
||
{ 44, 1, "EDIT_DISP" },
|
||
{ 45, 2, "EDIT_HAND_ANIM" },
|
||
{ 46, 3, "AIM" },
|
||
{ 47, 3, "HAND_ITEM" },
|
||
{ 48, 1, "EDIT_BLUSH" },
|
||
{ 49, 2, "NEAR_CLIP" },
|
||
{ 50, 2, "CLOTH_WET" },
|
||
{ 51, 3, "LIGHT_ROT" },
|
||
{ 52, 6, "SCENE_FADE" },
|
||
{ 53, 6, "TONE_TRANS" },
|
||
{ 54, 1, "SATURATE" },
|
||
{ 55, 1, "FADE_MODE" },
|
||
{ 56, 2, "AUTO_BLINK" },
|
||
{ 57, 3, "PARTS_DISP" },
|
||
{ 58, 1, "TARGET_FLYING_TIME" },
|
||
{ 59, 2, "CHARA_SIZE" },
|
||
{ 60, 2, "CHARA_HEIGHT_ADJUST" },
|
||
{ 61, 4, "ITEM_ANIM" },
|
||
{ 62, 4, "CHARA_POS_ADJUST" },
|
||
{ 63, 1, "SCENE_ROT" },
|
||
{ 64, 2, "EDIT_MOT_SMOOTH_LEN" },
|
||
{ 65, 1, "PV_BRANCH_MODE" },
|
||
{ 66, 2, "DATA_CAMERA_START" },
|
||
{ 67, 1, "MOVIE_PLAY" },
|
||
{ 68, 1, "MOVIE_DISP" },
|
||
{ 69, 3, "WIND" },
|
||
{ 70, 3, "OSAGE_STEP" },
|
||
{ 71, 3, "OSAGE_MV_CCL" },
|
||
{ 72, 2, "CHARA_COLOR" },
|
||
{ 73, 1, "SE_EFFECT" },
|
||
{ 74, 2, "CHARA_SHADOW_QUALITY" },
|
||
{ 75, 2, "STAGE_SHADOW_QUALITY" },
|
||
{ 76, 2, "COMMON_LIGHT" },
|
||
{ 77, 2, "TONE_MAP" },
|
||
{ 78, 2, "IBL_COLOR" },
|
||
{ 79, 2, "REFLECTION" },
|
||
{ 80, 3, "CHROMATIC_ABERRATION" },
|
||
{ 81, 2, "STAGE_SHADOW" },
|
||
{ 82, 2, "REFLECTION_QUALITY" },
|
||
{ 83, 2, "PV_END_FADEOUT" },
|
||
{ 84, 1, "CREDIT_TITLE" },
|
||
{ 85, 1, "BAR_POINT" },
|
||
{ 86, 1, "BEAT_POINT" },
|
||
{ 87, 0, "RESERVE" },
|
||
{ 88, 2, "PV_AUTH_LIGHT_PRIORITY" },
|
||
{ 89, 3, "PV_CHARA_LIGHT" },
|
||
{ 90, 3, "PV_STAGE_LIGHT" },
|
||
{ 91, 11, "TARGET_EFFECT" },
|
||
{ 92, 3, "FOG" },
|
||
{ 93, 2, "BLOOM" },
|
||
{ 94, 3, "COLOR_CORRECTION" },
|
||
{ 95, 3, "DOF" },
|
||
{ 96, 4, "CHARA_ALPHA" },
|
||
{ 97, 1, "AUTO_CAPTURE_BEGIN" },
|
||
{ 98, 1, "MANUAL_CAPTURE" },
|
||
{ 99, 3, "TOON_EDGE" },
|
||
{ 100, 3, "SHIMMER" },
|
||
{ 101, 4, "ITEM_ALPHA" },
|
||
{ 102, 1, "MOVIE_CUT" },
|
||
{ 103, 112, "EDIT_CAMERA_BOX" },
|
||
{ 104, 1, "EDIT_STAGE_PARAM" },
|
||
{ 105, 1, "EDIT_CHANGE_FIELD" },
|
||
{ 106, 7, "MIKUDAYO_ADJUST" },
|
||
{ 107, 2, "LYRIC_2" },
|
||
{ 108, 2, "LYRIC_READ" },
|
||
{ 109, 2, "LYRIC_READ_2" },
|
||
{ 110, 5, "ANNOTATION" },
|
||
{ 111, 2, "STAGE_EFFECT" },
|
||
{ 112, 3, "SONG_EFFECT" },
|
||
{ 113, 3, "SONG_EFFECT_ATTACH" },
|
||
{ 114, 2, "LIGHT_AUTH" },
|
||
{ 115, 2, "FADE" },
|
||
{ 116, 2, "SET_STAGE_EFFECT_ENV" },
|
||
{ 117, 2, "RESERVE" },
|
||
{ 118, 2, "COMMON_EFFECT_AET_FRONT" },
|
||
{ 119, 2, "COMMON_EFFECT_AET_FRONT_LOW" },
|
||
{ 120, 2, "COMMON_EFFECT_PARTICLE" },
|
||
{ 121, 3, "SONG_EFFECT_ALPHA_SORT" },
|
||
{ 122, 5, "LOOK_CAMERA_FACE_LIMIT" },
|
||
{ 123, 3, "ITEM_LIGHT" },
|
||
{ 124, 3, "CHARA_EFFECT" },
|
||
{ 125, 2, "MARKER" },
|
||
{ 126, 3, "CHARA_EFFECT_CHARA_LIGHT" },
|
||
{ 127, 2, "ENABLE_COMMON_LIGHT_TO_CHARA" },
|
||
{ 128, 2, "ENABLE_FXAA" },
|
||
{ 129, 2, "ENABLE_TEMPORAL_AA" },
|
||
{ 130, 2, "ENABLE_REFLECTION" },
|
||
{ 131, 2, "BANK_BRANCH" },
|
||
{ 132, 2, "BANK_END" },
|
||
{ 133, 2, "" },
|
||
{ 134, 2, "" },
|
||
{ 135, 2, "" },
|
||
{ 136, 2, "" },
|
||
{ 137, 2, "" },
|
||
{ 138, 2, "VR_LIVE_CHARA_MONITOR_UPDATE_Y" },
|
||
{ 139, 2, "VR_LIVE_POINT_FINGER" },
|
||
{ 140, 2, "VR_LIVE_CHARA_MONITOR" },
|
||
{ 141, 2, "VR_LIVE_MOVIE" },
|
||
{ 142, 2, "VR_CHEER" },
|
||
{ 143, 2, "VR_CHARA_PSMOVE" },
|
||
{ 144, 2, "VR_MOVE_PATH" },
|
||
{ 145, 2, "VR_SET_BASE" },
|
||
{ 146, 2, "VR_TECH_DEMO_EFFECT" },
|
||
{ 147, 2, "VR_TRANSFORM" },
|
||
{ 148, 2, "GAZE" },
|
||
{ 149, 2, "TECH_DEMO_GESUTRE" },
|
||
{ 150, 2, "VR_CHEMICAL_LIGHT_COLOR" },
|
||
{ 151, 5, "VR_LIVE_MOB" },
|
||
{ 152, 9, "VR_LIVE_HAIR_OSAGE" },
|
||
{ 153, 9, "VR_LIVE_LOOK_CAMERA" },
|
||
{ 154, 5, "VR_LIVE_CHEER" },
|
||
{ 155, 3, "VR_LIVE_GESTURE" },
|
||
{ 156, 7, "VR_LIVE_CLONE" },
|
||
{ 157, 7, "VR_LOOP_EFFECT" },
|
||
{ 158, 6, "VR_LIVE_ONESHOT_EFFECT" },
|
||
{ 159, 9, "VR_LIVE_PRESENT" },
|
||
{ 160, 7, "VR_LIVE_TRANSFORM" },
|
||
{ 161, 5, "VR_LIVE_FLY" },
|
||
{ 162, 2, "VR_LIVE_CHARA_VOICE" },
|
||
};
|
||
|
||
#define DSC_AC101_FUNC_COUNT 36
|
||
#define DSC_AC110_FUNC_COUNT 37
|
||
#define DSC_AC120_FUNC_COUNT 40
|
||
#define DSC_AC200_FUNC_COUNT 58
|
||
#define DSC_AC210_FUNC_COUNT 64
|
||
#define DSC_AC500_FUNC_COUNT 65
|
||
#define DSC_AC510_FUNC_COUNT 87
|
||
#define DSC_AFT101_FUNC_COUNT 88
|
||
#define DSC_AFT200_FUNC_COUNT 90
|
||
#define DSC_AFT300_FUNC_COUNT 91
|
||
#define DSC_AFT310_FUNC_COUNT 92
|
||
#define DSC_AFT410_FUNC_COUNT 105
|
||
#define DSC_AFT701_FUNC_COUNT 106
|
||
#define DSC_FT_FUNC_COUNT 107
|
||
#define DSC_PSP_FUNC_COUNT 36
|
||
#define DSC_2ND_FUNC_COUNT 49
|
||
#define DSC_DT_FUNC_COUNT 36
|
||
#define DSC_DT2_FUNC_COUNT 64
|
||
#define DSC_F_FUNC_COUNT 84
|
||
#define DSC_F2_FUNC_COUNT 111
|
||
#define DSC_MGF_FUNC_COUNT 111
|
||
#define DSC_X_FUNC_COUNT 163
|
||
#define DSC_VRFL_FUNC_COUNT 163
|
||
|
||
const int32_t dsc_ac101_func_count = DSC_AC101_FUNC_COUNT;
|
||
const int32_t dsc_ac110_func_count = DSC_AC110_FUNC_COUNT;
|
||
const int32_t dsc_ac120_func_count = DSC_AC120_FUNC_COUNT;
|
||
const int32_t dsc_ac200_func_count = DSC_AC200_FUNC_COUNT;
|
||
const int32_t dsc_ac210_func_count = DSC_AC210_FUNC_COUNT;
|
||
const int32_t dsc_ac500_func_count = DSC_AC500_FUNC_COUNT;
|
||
const int32_t dsc_ac510_func_count = DSC_AC510_FUNC_COUNT;
|
||
const int32_t dsc_aft101_func_count = DSC_AFT101_FUNC_COUNT;
|
||
const int32_t dsc_aft200_func_count = DSC_AFT200_FUNC_COUNT;
|
||
const int32_t dsc_aft300_func_count = DSC_AFT300_FUNC_COUNT;
|
||
const int32_t dsc_aft310_func_count = DSC_AFT310_FUNC_COUNT;
|
||
const int32_t dsc_aft410_func_count = DSC_AFT410_FUNC_COUNT;
|
||
const int32_t dsc_aft701_func_count = DSC_AFT701_FUNC_COUNT;
|
||
const int32_t dsc_ft_func_count = DSC_FT_FUNC_COUNT;
|
||
const int32_t dsc_psp_func_count = DSC_PSP_FUNC_COUNT;
|
||
const int32_t dsc_2nd_func_count = DSC_2ND_FUNC_COUNT;
|
||
const int32_t dsc_dt_func_count = DSC_DT_FUNC_COUNT;
|
||
const int32_t dsc_dt2_func_count = DSC_DT2_FUNC_COUNT;
|
||
const int32_t dsc_f_func_count = DSC_F_FUNC_COUNT;
|
||
const int32_t dsc_f2_func_count = DSC_F2_FUNC_COUNT;
|
||
const int32_t dsc_mgf_func_count = DSC_MGF_FUNC_COUNT;
|
||
const int32_t dsc_x_func_count = DSC_X_FUNC_COUNT;
|
||
const int32_t dsc_vrfl_func_count = DSC_VRFL_FUNC_COUNT;
|
||
|
||
inline int32_t dsc_ac101_get_func_id(const char* name) {
|
||
uint64_t name_hash = hash_utf8_fnv1a64m(name);
|
||
for (int32_t i = 0; i < DSC_AC101_FUNC_COUNT; i++)
|
||
if (name_hash == hash_utf8_fnv1a64m(dsc_ac101_get_func_name(i)))
|
||
return i;
|
||
return -1;
|
||
}
|
||
|
||
inline int32_t dsc_ac110_get_func_id(const char* name) {
|
||
uint64_t name_hash = hash_utf8_fnv1a64m(name);
|
||
for (int32_t i = 0; i < DSC_AC110_FUNC_COUNT; i++)
|
||
if (name_hash == hash_utf8_fnv1a64m(dsc_ac110_get_func_name(i)))
|
||
return i;
|
||
return -1;
|
||
}
|
||
|
||
inline int32_t dsc_ac120_get_func_id(const char* name) {
|
||
uint64_t name_hash = hash_utf8_fnv1a64m(name);
|
||
for (int32_t i = 0; i < DSC_AC120_FUNC_COUNT; i++)
|
||
if (name_hash == hash_utf8_fnv1a64m(dsc_ac120_get_func_name(i)))
|
||
return i;
|
||
return -1;
|
||
}
|
||
|
||
inline int32_t dsc_ac200_get_func_id(const char* name) {
|
||
uint64_t name_hash = hash_utf8_fnv1a64m(name);
|
||
for (int32_t i = 0; i < DSC_AC200_FUNC_COUNT; i++)
|
||
if (name_hash == hash_utf8_fnv1a64m(dsc_ac200_get_func_name(i)))
|
||
return i;
|
||
return -1;
|
||
}
|
||
|
||
inline int32_t dsc_ac210_get_func_id(const char* name) {
|
||
uint64_t name_hash = hash_utf8_fnv1a64m(name);
|
||
for (int32_t i = 0; i < DSC_AC210_FUNC_COUNT; i++)
|
||
if (name_hash == hash_utf8_fnv1a64m(dsc_ac210_get_func_name(i)))
|
||
return i;
|
||
return -1;
|
||
}
|
||
|
||
inline int32_t dsc_ac500_get_func_id(const char* name) {
|
||
uint64_t name_hash = hash_utf8_fnv1a64m(name);
|
||
for (int32_t i = 0; i < DSC_AC500_FUNC_COUNT; i++)
|
||
if (name_hash == hash_utf8_fnv1a64m(dsc_ac500_get_func_name(i)))
|
||
return i;
|
||
return -1;
|
||
}
|
||
|
||
inline int32_t dsc_ac510_get_func_id(const char* name) {
|
||
uint64_t name_hash = hash_utf8_fnv1a64m(name);
|
||
for (int32_t i = 0; i < DSC_AC510_FUNC_COUNT; i++)
|
||
if (name_hash == hash_utf8_fnv1a64m(dsc_ac510_get_func_name(i)))
|
||
return i;
|
||
return -1;
|
||
}
|
||
|
||
inline int32_t dsc_aft101_get_func_id(const char* name) {
|
||
uint64_t name_hash = hash_utf8_fnv1a64m(name);
|
||
for (int32_t i = 0; i < DSC_AFT101_FUNC_COUNT; i++)
|
||
if (name_hash == hash_utf8_fnv1a64m(dsc_aft101_get_func_name(i)))
|
||
return i;
|
||
return -1;
|
||
}
|
||
|
||
inline int32_t dsc_aft200_get_func_id(const char* name) {
|
||
uint64_t name_hash = hash_utf8_fnv1a64m(name);
|
||
for (int32_t i = 0; i < DSC_AFT200_FUNC_COUNT; i++)
|
||
if (name_hash == hash_utf8_fnv1a64m(dsc_aft200_get_func_name(i)))
|
||
return i;
|
||
return -1;
|
||
}
|
||
|
||
inline int32_t dsc_aft300_get_func_id(const char* name) {
|
||
uint64_t name_hash = hash_utf8_fnv1a64m(name);
|
||
for (int32_t i = 0; i < DSC_AFT300_FUNC_COUNT; i++)
|
||
if (name_hash == hash_utf8_fnv1a64m(dsc_aft300_get_func_name(i)))
|
||
return i;
|
||
return -1;
|
||
}
|
||
|
||
inline int32_t dsc_aft310_get_func_id(const char* name) {
|
||
uint64_t name_hash = hash_utf8_fnv1a64m(name);
|
||
for (int32_t i = 0; i < DSC_AFT310_FUNC_COUNT; i++)
|
||
if (name_hash == hash_utf8_fnv1a64m(dsc_aft310_get_func_name(i)))
|
||
return i;
|
||
return -1;
|
||
}
|
||
|
||
inline int32_t dsc_aft410_get_func_id(const char* name) {
|
||
uint64_t name_hash = hash_utf8_fnv1a64m(name);
|
||
for (int32_t i = 0; i < DSC_AFT410_FUNC_COUNT; i++)
|
||
if (name_hash == hash_utf8_fnv1a64m(dsc_aft410_get_func_name(i)))
|
||
return i;
|
||
return -1;
|
||
}
|
||
|
||
inline int32_t dsc_aft701_get_func_id(const char* name) {
|
||
uint64_t name_hash = hash_utf8_fnv1a64m(name);
|
||
for (int32_t i = 0; i < DSC_AFT701_FUNC_COUNT; i++)
|
||
if (name_hash == hash_utf8_fnv1a64m(dsc_aft701_get_func_name(i)))
|
||
return i;
|
||
return -1;
|
||
}
|
||
|
||
inline int32_t dsc_ft_get_func_id(const char* name) {
|
||
uint64_t name_hash = hash_utf8_fnv1a64m(name);
|
||
for (int32_t i = 0; i < DSC_FT_FUNC_COUNT; i++)
|
||
if (name_hash == hash_utf8_fnv1a64m(dsc_ft_get_func_name(i)))
|
||
return i;
|
||
return -1;
|
||
}
|
||
|
||
inline int32_t dsc_psp_get_func_id(const char* name) {
|
||
uint64_t name_hash = hash_utf8_fnv1a64m(name);
|
||
for (int32_t i = 0; i < DSC_PSP_FUNC_COUNT; i++)
|
||
if (name_hash == hash_utf8_fnv1a64m(dsc_psp_get_func_name(i)))
|
||
return i;
|
||
return -1;
|
||
}
|
||
|
||
inline int32_t dsc_2nd_get_func_id(const char* name) {
|
||
uint64_t name_hash = hash_utf8_fnv1a64m(name);
|
||
for (int32_t i = 0; i < DSC_2ND_FUNC_COUNT; i++)
|
||
if (name_hash == hash_utf8_fnv1a64m(dsc_2nd_get_func_name(i)))
|
||
return i;
|
||
return -1;
|
||
}
|
||
|
||
inline int32_t dsc_dt_get_func_id(const char* name) {
|
||
uint64_t name_hash = hash_utf8_fnv1a64m(name);
|
||
for (int32_t i = 0; i < DSC_DT_FUNC_COUNT; i++)
|
||
if (name_hash == hash_utf8_fnv1a64m(dsc_dt_get_func_name(i)))
|
||
return i;
|
||
return -1;
|
||
}
|
||
|
||
inline int32_t dsc_dt2_get_func_id(const char* name) {
|
||
uint64_t name_hash = hash_utf8_fnv1a64m(name);
|
||
for (int32_t i = 0; i < DSC_DT2_FUNC_COUNT; i++)
|
||
if (name_hash == hash_utf8_fnv1a64m(dsc_dt2_get_func_name(i)))
|
||
return i;
|
||
return -1;
|
||
}
|
||
|
||
inline int32_t dsc_f_get_func_id(const char* name) {
|
||
uint64_t name_hash = hash_utf8_fnv1a64m(name);
|
||
for (int32_t i = 0; i < DSC_F_FUNC_COUNT; i++)
|
||
if (name_hash == hash_utf8_fnv1a64m(dsc_f_get_func_name(i)))
|
||
return i;
|
||
return -1;
|
||
}
|
||
|
||
inline int32_t dsc_f2_get_func_id(const char* name) {
|
||
uint64_t name_hash = hash_utf8_fnv1a64m(name);
|
||
for (int32_t i = 0; i < DSC_F2_FUNC_COUNT; i++)
|
||
if (name_hash == hash_utf8_fnv1a64m(dsc_f2_get_func_name(i)))
|
||
return i;
|
||
return -1;
|
||
}
|
||
|
||
inline int32_t dsc_mgf_get_func_id(const char* name) {
|
||
uint64_t name_hash = hash_utf8_fnv1a64m(name);
|
||
for (int32_t i = 0; i < DSC_MGF_FUNC_COUNT; i++)
|
||
if (name_hash == hash_utf8_fnv1a64m(dsc_mgf_get_func_name(i)))
|
||
return i;
|
||
return -1;
|
||
}
|
||
|
||
inline int32_t dsc_x_get_func_id(const char* name) {
|
||
uint64_t name_hash = hash_utf8_fnv1a64m(name);
|
||
for (int32_t i = 0; i < DSC_X_FUNC_COUNT; i++)
|
||
if (name_hash == hash_utf8_fnv1a64m(dsc_x_get_func_name(i)))
|
||
return i;
|
||
return -1;
|
||
}
|
||
|
||
inline int32_t dsc_vrfl_get_func_id(const char* name) {
|
||
uint64_t name_hash = hash_utf8_fnv1a64m(name);
|
||
for (int32_t i = 0; i < DSC_VRFL_FUNC_COUNT; i++)
|
||
if (name_hash == hash_utf8_fnv1a64m(dsc_vrfl_get_func_name(i)))
|
||
return i;
|
||
return -1;
|
||
}
|
||
|
||
inline int32_t dsc_ac101_get_func_length(int32_t id) {
|
||
return id > -1 && id < DSC_AC101_FUNC_COUNT ? dsc_ac101_func[id].length : -1;
|
||
}
|
||
|
||
inline int32_t dsc_ac110_get_func_length(int32_t id) {
|
||
return id > -1 && id < DSC_AC110_FUNC_COUNT ? dsc_ac101_func[id].length : -1;
|
||
}
|
||
|
||
inline int32_t dsc_ac120_get_func_length(int32_t id) {
|
||
return id > -1 && id < DSC_AC120_FUNC_COUNT ? dsc_ac101_func[id].length : -1;
|
||
}
|
||
|
||
inline int32_t dsc_ac200_get_func_length(int32_t id) {
|
||
return id > -1 && id < DSC_AC200_FUNC_COUNT ? dsc_ac_func[id].length : -1;
|
||
}
|
||
|
||
inline int32_t dsc_ac210_get_func_length(int32_t id) {
|
||
return id > -1 && id < DSC_AC210_FUNC_COUNT ? dsc_ac_func[id].length : -1;
|
||
}
|
||
|
||
inline int32_t dsc_ac500_get_func_length(int32_t id) {
|
||
return id > -1 && id < DSC_AC210_FUNC_COUNT ? dsc_ac_func[id].length : -1;
|
||
}
|
||
|
||
inline int32_t dsc_ac510_get_func_length(int32_t id) {
|
||
return id > -1 && id < DSC_AC510_FUNC_COUNT ? dsc_ac_func[id].length : -1;
|
||
}
|
||
|
||
inline int32_t dsc_aft101_get_func_length(int32_t id) {
|
||
return id > -1 && id < DSC_AFT101_FUNC_COUNT ? dsc_ac_func[id].length : -1;
|
||
}
|
||
|
||
inline int32_t dsc_aft200_get_func_length(int32_t id) {
|
||
return id > -1 && id < DSC_AFT200_FUNC_COUNT ? dsc_ac_func[id].length : -1;
|
||
}
|
||
|
||
inline int32_t dsc_aft300_get_func_length(int32_t id) {
|
||
return id > -1 && id < DSC_AFT300_FUNC_COUNT ? dsc_ac_func[id].length : -1;
|
||
}
|
||
|
||
inline int32_t dsc_aft310_get_func_length(int32_t id) {
|
||
return id > -1 && id < DSC_AFT310_FUNC_COUNT ? dsc_ac_func[id].length : -1;
|
||
}
|
||
|
||
inline int32_t dsc_aft410_get_func_length(int32_t id) {
|
||
return id > -1 && id < DSC_AFT410_FUNC_COUNT ? dsc_ac_func[id].length : -1;
|
||
}
|
||
|
||
inline int32_t dsc_aft701_get_func_length(int32_t id) {
|
||
return id > -1 && id < DSC_AFT701_FUNC_COUNT ? dsc_ac_func[id].length : -1;
|
||
}
|
||
|
||
inline int32_t dsc_ft_get_func_length(int32_t id) {
|
||
return id > -1 && id < DSC_FT_FUNC_COUNT ? dsc_ac_func[id].length : -1;
|
||
}
|
||
|
||
inline int32_t dsc_psp_get_func_length(int32_t id) {
|
||
return id > -1 && id < DSC_PSP_FUNC_COUNT ? dsc_ac101_func[id].length : -1;
|
||
}
|
||
|
||
inline int32_t dsc_2nd_get_func_length(int32_t id) {
|
||
return id > -1 && id < DSC_2ND_FUNC_COUNT ? dsc_f_func[id].length : -1;
|
||
}
|
||
|
||
inline int32_t dsc_dt_get_func_length(int32_t id) {
|
||
return id > -1 && id < DSC_DT_FUNC_COUNT ? dsc_ac101_func[id].length : -1;
|
||
}
|
||
|
||
inline int32_t dsc_dt2_get_func_length(int32_t id) {
|
||
return id > -1 && id < DSC_DT2_FUNC_COUNT ? dsc_f_func[id].length : -1;
|
||
}
|
||
|
||
inline int32_t dsc_f_get_func_length(int32_t id) {
|
||
return id > -1 && id < DSC_F_FUNC_COUNT ? dsc_f_func[id].length : -1;
|
||
}
|
||
|
||
inline int32_t dsc_f2_get_func_length(int32_t id) {
|
||
return id > -1 && id < DSC_F2_FUNC_COUNT ? dsc_f2_func[id].length : -1;
|
||
}
|
||
|
||
inline int32_t dsc_mgf_get_func_length(int32_t id) {
|
||
return id > -1 && id < DSC_MGF_FUNC_COUNT ? dsc_mgf_func[id].length : -1;
|
||
}
|
||
|
||
inline int32_t dsc_x_get_func_length(int32_t id) {
|
||
return id > -1 && id < DSC_X_FUNC_COUNT ? dsc_x_func[id].length : -1;
|
||
}
|
||
|
||
inline int32_t dsc_vrfl_get_func_length(int32_t id) {
|
||
return id > -1 && id < DSC_VRFL_FUNC_COUNT ? dsc_vrfl_func[id].length : -1;
|
||
}
|
||
|
||
inline int32_t dsc_ac200_get_func_length_old(int32_t id) {
|
||
return id > -1 && id < DSC_AC200_FUNC_COUNT ? dsc_ac_func[id].length_old : -1;
|
||
}
|
||
|
||
inline int32_t dsc_ac210_get_func_length_old(int32_t id) {
|
||
return id > -1 && id < DSC_AC210_FUNC_COUNT ? dsc_ac_func[id].length_old : -1;
|
||
}
|
||
|
||
inline int32_t dsc_ac500_get_func_length_old(int32_t id) {
|
||
return id > -1 && id < DSC_AC500_FUNC_COUNT ? dsc_ac_func[id].length_old : -1;
|
||
}
|
||
|
||
inline int32_t dsc_ac510_get_func_length_old(int32_t id) {
|
||
return id > -1 && id < DSC_AC510_FUNC_COUNT ? dsc_ac_func[id].length_old : -1;
|
||
}
|
||
|
||
inline int32_t dsc_aft101_get_func_length_old(int32_t id) {
|
||
return id > -1 && id < DSC_AFT101_FUNC_COUNT ? dsc_ac_func[id].length_old : -1;
|
||
}
|
||
|
||
inline int32_t dsc_aft200_get_func_length_old(int32_t id) {
|
||
return id > -1 && id < DSC_AFT200_FUNC_COUNT ? dsc_ac_func[id].length_old : -1;
|
||
}
|
||
|
||
inline int32_t dsc_aft300_get_func_length_old(int32_t id) {
|
||
return id > -1 && id < DSC_AFT300_FUNC_COUNT ? dsc_ac_func[id].length_old : -1;
|
||
}
|
||
|
||
inline int32_t dsc_aft310_get_func_length_old(int32_t id) {
|
||
return id > -1 && id < DSC_AFT310_FUNC_COUNT ? dsc_ac_func[id].length_old : -1;
|
||
}
|
||
|
||
inline int32_t dsc_aft410_get_func_length_old(int32_t id) {
|
||
return id > -1 && id < DSC_AFT410_FUNC_COUNT ? dsc_ac_func[id].length_old : -1;
|
||
}
|
||
|
||
inline int32_t dsc_aft701_get_func_length_old(int32_t id) {
|
||
return id > -1 && id < DSC_AFT701_FUNC_COUNT ? dsc_ac_func[id].length_old : -1;
|
||
}
|
||
|
||
inline int32_t dsc_ft_get_func_length_old(int32_t id) {
|
||
return id > -1 && id < DSC_FT_FUNC_COUNT ? dsc_ac_func[id].length_old : -1;
|
||
}
|
||
|
||
inline int32_t dsc_dt2_get_func_length_old(int32_t id) {
|
||
return id > -1 && id < DSC_DT_FUNC_COUNT ? dsc_f_func[id].length_old : -1;
|
||
}
|
||
|
||
inline int32_t dsc_f_get_func_length_old(int32_t id) {
|
||
return id > -1 && id < DSC_F_FUNC_COUNT ? dsc_f_func[id].length_old : -1;
|
||
}
|
||
|
||
inline const char* dsc_ac101_get_func_name(int32_t id) {
|
||
return id > -1 && id < DSC_AC101_FUNC_COUNT ? dsc_ac101_func[id].name : 0;
|
||
}
|
||
|
||
inline const char* dsc_ac110_get_func_name(int32_t id) {
|
||
return id > -1 && id < DSC_AC110_FUNC_COUNT ? dsc_ac101_func[id].name : 0;
|
||
}
|
||
|
||
inline const char* dsc_ac120_get_func_name(int32_t id) {
|
||
return id > -1 && id < DSC_AC120_FUNC_COUNT ? dsc_ac101_func[id].name : 0;
|
||
}
|
||
|
||
inline const char* dsc_ac200_get_func_name(int32_t id) {
|
||
return id > -1 && id < DSC_AC200_FUNC_COUNT ? dsc_ac_func[id].name : 0;
|
||
}
|
||
|
||
inline const char* dsc_ac210_get_func_name(int32_t id) {
|
||
return id > -1 && id < DSC_AC210_FUNC_COUNT ? dsc_ac_func[id].name : 0;
|
||
}
|
||
|
||
inline const char* dsc_ac500_get_func_name(int32_t id) {
|
||
return id > -1 && id < DSC_AC500_FUNC_COUNT ? dsc_ac_func[id].name : 0;
|
||
}
|
||
|
||
inline const char* dsc_ac510_get_func_name(int32_t id) {
|
||
return id > -1 && id < DSC_AC510_FUNC_COUNT ? dsc_ac_func[id].name : 0;
|
||
}
|
||
|
||
inline const char* dsc_aft101_get_func_name(int32_t id) {
|
||
return id > -1 && id < DSC_AFT101_FUNC_COUNT ? dsc_ac_func[id].name : 0;
|
||
}
|
||
|
||
inline const char* dsc_aft200_get_func_name(int32_t id) {
|
||
return id > -1 && id < DSC_AFT200_FUNC_COUNT ? dsc_ac_func[id].name : 0;
|
||
}
|
||
|
||
inline const char* dsc_aft300_get_func_name(int32_t id) {
|
||
return id > -1 && id < DSC_AFT300_FUNC_COUNT ? dsc_ac_func[id].name : 0;
|
||
}
|
||
|
||
inline const char* dsc_aft310_get_func_name(int32_t id) {
|
||
return id > -1 && id < DSC_AFT310_FUNC_COUNT ? dsc_ac_func[id].name : 0;
|
||
}
|
||
|
||
inline const char* dsc_aft410_get_func_name(int32_t id) {
|
||
return id > -1 && id < DSC_AFT410_FUNC_COUNT ? dsc_ac_func[id].name : 0;
|
||
}
|
||
|
||
inline const char* dsc_aft701_get_func_name(int32_t id) {
|
||
return id > -1 && id < DSC_AFT701_FUNC_COUNT ? dsc_ac_func[id].name : 0;
|
||
}
|
||
|
||
inline const char* dsc_ft_get_func_name(int32_t id) {
|
||
return id > -1 && id < DSC_FT_FUNC_COUNT ? dsc_ac_func[id].name : 0;
|
||
}
|
||
|
||
inline const char* dsc_psp_get_func_name(int32_t id) {
|
||
return id > -1 && id < DSC_PSP_FUNC_COUNT ? dsc_ac101_func[id].name : 0;
|
||
}
|
||
|
||
inline const char* dsc_2nd_get_func_name(int32_t id) {
|
||
return id > -1 && id < DSC_2ND_FUNC_COUNT ? dsc_f_func[id].name : 0;
|
||
}
|
||
|
||
inline const char* dsc_dt_get_func_name(int32_t id) {
|
||
return id > -1 && id < DSC_DT_FUNC_COUNT ? dsc_ac101_func[id].name : 0;
|
||
}
|
||
|
||
inline const char* dsc_dt2_get_func_name(int32_t id) {
|
||
return id > -1 && id < DSC_DT2_FUNC_COUNT ? dsc_f_func[id].name : 0;
|
||
}
|
||
|
||
inline const char* dsc_f_get_func_name(int32_t id) {
|
||
return id > -1 && id < DSC_F_FUNC_COUNT ? dsc_f_func[id].name : 0;
|
||
}
|
||
|
||
inline const char* dsc_f2_get_func_name(int32_t id) {
|
||
return id > -1 && id < DSC_F2_FUNC_COUNT ? dsc_f2_func[id].name : 0;
|
||
}
|
||
|
||
inline const char* dsc_mgf_get_func_name(int32_t id) {
|
||
return id > -1 && id < DSC_MGF_FUNC_COUNT ? dsc_mgf_func[id].name : 0;
|
||
}
|
||
|
||
inline const char* dsc_x_get_func_name(int32_t id) {
|
||
return id > -1 && id < DSC_X_FUNC_COUNT ? dsc_x_func[id].name : 0;
|
||
}
|
||
|
||
inline const char* dsc_vrfl_get_func_name(int32_t id) {
|
||
return id > -1 && id < DSC_VRFL_FUNC_COUNT ? dsc_vrfl_func[id].name : 0;
|
||
}
|
||
|
||
struct dsc_data_time {
|
||
int32_t time;
|
||
int32_t pv_branch_mode;
|
||
const char* name;
|
||
int32_t func;
|
||
uint32_t data_offset;
|
||
};
|
||
|
||
static void dsc_convert_from_ac100_cloth_wet(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_from_ac100_edit_face(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_from_ac100_edit_motion(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_from_ac100_effect(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_from_ac100_expression(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_from_ac100_eye_anim(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_from_ac100_hand_anim(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_from_ac100_look_anim(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_from_ac100_look_camera(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_from_ac100_lyric(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_from_ac100_miku_disp(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_from_ac100_miku_move(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_from_ac100_miku_rot(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_from_ac100_miku_shadow(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_from_ac100_mode_select(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_from_ac100_mouth_anim(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_from_ac100_move_camera(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_from_ac100_set_motion(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_from_ac100_set_playdata(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_from_ac100_shadowheight(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_from_ac100_shadowpos(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_to_ac100_cloth_wet(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_to_ac100_edit_face(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_to_ac100_edit_motion(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_to_ac100_effect(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_to_ac100_expression(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_to_ac100_eye_anim(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_to_ac100_hand_anim(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_to_ac100_look_anim(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_to_ac100_look_camera(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_to_ac100_lyric(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_to_ac100_miku_disp(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_to_ac100_miku_move(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_to_ac100_miku_rot(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_to_ac100_miku_shadow(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_to_ac100_mode_select(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_to_ac100_mouth_anim(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_to_ac100_move_camera(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_to_ac100_set_motion(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_to_ac100_set_playdata(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_to_ac100_shadowheight(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_to_ac100_shadowpos(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_change_field1_to_change_field2(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_change_field2_to_change_field1(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_dummy(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_note7_to_note11(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_note7_to_note12(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_note11_to_note7(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_note11_to_note12(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_note12_to_note7(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static void dsc_convert_note12_to_note11(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data);
|
||
static uint32_t* dsc_replace_add_func(dsc_replace* dr, dsc_replace_data* drd);
|
||
inline static dsc_get_func_length dsc_type_get_dsc_get_func_length(dsc_type type, bool has_perf_id);
|
||
|
||
inline int32_t dsc_type_get_dsc_func_count(dsc_type type) {
|
||
switch (type) {
|
||
case DSC_NONE:
|
||
default:
|
||
return DSC_FT_FUNC_COUNT;
|
||
case DSC_AC101:
|
||
return DSC_AC101_FUNC_COUNT;
|
||
case DSC_AC110:
|
||
return DSC_AC110_FUNC_COUNT;
|
||
case DSC_AC120:
|
||
return DSC_AC120_FUNC_COUNT;
|
||
case DSC_AC200:
|
||
return DSC_AC200_FUNC_COUNT;
|
||
case DSC_AC210:
|
||
return DSC_AC210_FUNC_COUNT;
|
||
case DSC_AC500:
|
||
return DSC_AC500_FUNC_COUNT;
|
||
case DSC_AC510:
|
||
return DSC_AC510_FUNC_COUNT;
|
||
case DSC_AFT101:
|
||
return DSC_AFT101_FUNC_COUNT;
|
||
case DSC_AFT200:
|
||
return DSC_AFT200_FUNC_COUNT;
|
||
case DSC_AFT300:
|
||
return DSC_AFT300_FUNC_COUNT;
|
||
case DSC_AFT310:
|
||
return DSC_AFT310_FUNC_COUNT;
|
||
case DSC_AFT410:
|
||
return DSC_AFT410_FUNC_COUNT;
|
||
case DSC_AFT701:
|
||
return DSC_AFT701_FUNC_COUNT;
|
||
case DSC_FT:
|
||
return DSC_FT_FUNC_COUNT;
|
||
case DSC_PSP:
|
||
return DSC_PSP_FUNC_COUNT;
|
||
case DSC_2ND:
|
||
return DSC_2ND_FUNC_COUNT;
|
||
case DSC_DT:
|
||
return DSC_DT_FUNC_COUNT;
|
||
case DSC_DT2:
|
||
return DSC_DT2_FUNC_COUNT;
|
||
case DSC_F:
|
||
return DSC_F_FUNC_COUNT;
|
||
case DSC_F2:
|
||
return DSC_F2_FUNC_COUNT;
|
||
case DSC_MGF:
|
||
return DSC_MGF_FUNC_COUNT;
|
||
case DSC_X:
|
||
return DSC_X_FUNC_COUNT;
|
||
case DSC_VRFL:
|
||
return DSC_VRFL_FUNC_COUNT;
|
||
}
|
||
}
|
||
|
||
inline dsc_get_func_id dsc_type_get_dsc_get_func_id(dsc_type type) {
|
||
switch (type) {
|
||
case DSC_NONE:
|
||
default:
|
||
return dsc_ft_get_func_id;
|
||
case DSC_AC101:
|
||
return dsc_ac101_get_func_id;
|
||
case DSC_AC110:
|
||
return dsc_ac110_get_func_id;
|
||
case DSC_AC120:
|
||
return dsc_ac120_get_func_id;
|
||
case DSC_AC200:
|
||
return dsc_ac200_get_func_id;
|
||
case DSC_AC210:
|
||
return dsc_ac210_get_func_id;
|
||
case DSC_AC500:
|
||
return dsc_ac500_get_func_id;
|
||
case DSC_AC510:
|
||
return dsc_ac510_get_func_id;
|
||
case DSC_AFT101:
|
||
return dsc_aft101_get_func_id;
|
||
case DSC_AFT200:
|
||
return dsc_aft200_get_func_id;
|
||
case DSC_AFT300:
|
||
return dsc_aft300_get_func_id;
|
||
case DSC_AFT310:
|
||
return dsc_aft310_get_func_id;
|
||
case DSC_AFT410:
|
||
return dsc_aft410_get_func_id;
|
||
case DSC_AFT701:
|
||
return dsc_aft701_get_func_id;
|
||
case DSC_FT:
|
||
return dsc_ft_get_func_id;
|
||
case DSC_PSP:
|
||
return dsc_psp_get_func_id;
|
||
case DSC_2ND:
|
||
return dsc_2nd_get_func_id;
|
||
case DSC_DT:
|
||
return dsc_dt_get_func_id;
|
||
case DSC_DT2:
|
||
return dsc_dt2_get_func_id;
|
||
case DSC_F:
|
||
return dsc_f_get_func_id;
|
||
case DSC_F2:
|
||
return dsc_f2_get_func_id;
|
||
case DSC_MGF:
|
||
return dsc_mgf_get_func_id;
|
||
case DSC_X:
|
||
return dsc_x_get_func_id;
|
||
case DSC_VRFL:
|
||
return dsc_vrfl_get_func_id;
|
||
}
|
||
}
|
||
|
||
inline dsc_get_func_length dsc_type_get_dsc_get_func_length(dsc_type type, bool has_perf_id) {
|
||
if (has_perf_id)
|
||
switch (type) {
|
||
case DSC_NONE:
|
||
default:
|
||
return dsc_ft_get_func_length;
|
||
case DSC_AC101:
|
||
return dsc_ac101_get_func_length;
|
||
case DSC_AC110:
|
||
return dsc_ac110_get_func_length;
|
||
case DSC_AC120:
|
||
return dsc_ac120_get_func_length;
|
||
case DSC_AC200:
|
||
return dsc_ac200_get_func_length;
|
||
case DSC_AC210:
|
||
return dsc_ac210_get_func_length;
|
||
case DSC_AC500:
|
||
return dsc_ac500_get_func_length;
|
||
case DSC_AC510:
|
||
return dsc_ac510_get_func_length;
|
||
case DSC_AFT101:
|
||
return dsc_aft101_get_func_length;
|
||
case DSC_AFT200:
|
||
return dsc_aft200_get_func_length;
|
||
case DSC_AFT300:
|
||
return dsc_aft300_get_func_length;
|
||
case DSC_AFT310:
|
||
return dsc_aft310_get_func_length;
|
||
case DSC_AFT410:
|
||
return dsc_aft410_get_func_length;
|
||
case DSC_AFT701:
|
||
return dsc_aft701_get_func_length;
|
||
case DSC_FT:
|
||
return dsc_ft_get_func_length;
|
||
case DSC_PSP:
|
||
return dsc_psp_get_func_length;
|
||
case DSC_2ND:
|
||
return dsc_2nd_get_func_length;
|
||
case DSC_DT:
|
||
return dsc_dt_get_func_length;
|
||
case DSC_DT2:
|
||
return dsc_dt2_get_func_length;
|
||
case DSC_F:
|
||
return dsc_f_get_func_length;
|
||
case DSC_F2:
|
||
return dsc_f2_get_func_length;
|
||
case DSC_MGF:
|
||
return dsc_mgf_get_func_length;
|
||
case DSC_X:
|
||
return dsc_x_get_func_length;
|
||
case DSC_VRFL:
|
||
return dsc_vrfl_get_func_length;
|
||
}
|
||
else
|
||
switch (type) {
|
||
case DSC_NONE:
|
||
default:
|
||
return dsc_ft_get_func_length;
|
||
case DSC_AC101:
|
||
return dsc_ac101_get_func_length;
|
||
case DSC_AC110:
|
||
return dsc_ac110_get_func_length;
|
||
case DSC_AC120:
|
||
return dsc_ac120_get_func_length;
|
||
case DSC_AC200:
|
||
return dsc_ac200_get_func_length_old;
|
||
case DSC_AC210:
|
||
return dsc_ac210_get_func_length_old;
|
||
case DSC_AC500:
|
||
return dsc_ac500_get_func_length_old;
|
||
case DSC_AC510:
|
||
return dsc_ac510_get_func_length_old;
|
||
case DSC_AFT101:
|
||
return dsc_aft101_get_func_length_old;
|
||
case DSC_AFT200:
|
||
return dsc_aft200_get_func_length_old;
|
||
case DSC_AFT300:
|
||
return dsc_aft300_get_func_length_old;
|
||
case DSC_AFT310:
|
||
return dsc_aft310_get_func_length_old;
|
||
case DSC_AFT410:
|
||
return dsc_aft410_get_func_length_old;
|
||
case DSC_AFT701:
|
||
return dsc_aft701_get_func_length_old;
|
||
case DSC_FT:
|
||
return dsc_ft_get_func_length;
|
||
case DSC_PSP:
|
||
return dsc_psp_get_func_length;
|
||
case DSC_2ND:
|
||
return dsc_2nd_get_func_length;
|
||
case DSC_DT:
|
||
return dsc_dt_get_func_length;
|
||
case DSC_DT2:
|
||
return dsc_dt2_get_func_length;
|
||
case DSC_F:
|
||
return dsc_f_get_func_length_old;
|
||
case DSC_F2:
|
||
return dsc_f2_get_func_length;
|
||
case DSC_MGF:
|
||
return dsc_mgf_get_func_length;
|
||
case DSC_X:
|
||
return dsc_x_get_func_length;
|
||
case DSC_VRFL:
|
||
return dsc_vrfl_get_func_length;
|
||
}
|
||
}
|
||
|
||
inline dsc_get_func_name dsc_type_get_dsc_get_func_name(dsc_type type) {
|
||
switch (type) {
|
||
case DSC_NONE:
|
||
default:
|
||
return dsc_ft_get_func_name;
|
||
case DSC_AC101:
|
||
return dsc_ac101_get_func_name;
|
||
case DSC_AC110:
|
||
return dsc_ac110_get_func_name;
|
||
case DSC_AC120:
|
||
return dsc_ac120_get_func_name;
|
||
case DSC_AC200:
|
||
return dsc_ac200_get_func_name;
|
||
case DSC_AC210:
|
||
return dsc_ac210_get_func_name;
|
||
case DSC_AC500:
|
||
return dsc_ac500_get_func_name;
|
||
case DSC_AC510:
|
||
return dsc_ac510_get_func_name;
|
||
case DSC_AFT101:
|
||
return dsc_aft101_get_func_name;
|
||
case DSC_AFT200:
|
||
return dsc_aft200_get_func_name;
|
||
case DSC_AFT300:
|
||
return dsc_aft300_get_func_name;
|
||
case DSC_AFT310:
|
||
return dsc_aft310_get_func_name;
|
||
case DSC_AFT410:
|
||
return dsc_aft410_get_func_name;
|
||
case DSC_AFT701:
|
||
return dsc_aft701_get_func_name;
|
||
case DSC_FT:
|
||
return dsc_ft_get_func_name;
|
||
case DSC_PSP:
|
||
return dsc_psp_get_func_name;
|
||
case DSC_2ND:
|
||
return dsc_2nd_get_func_name;
|
||
case DSC_DT:
|
||
return dsc_dt_get_func_name;
|
||
case DSC_DT2:
|
||
return dsc_dt2_get_func_name;
|
||
case DSC_F:
|
||
return dsc_f_get_func_name;
|
||
case DSC_F2:
|
||
return dsc_f2_get_func_name;
|
||
case DSC_MGF:
|
||
return dsc_mgf_get_func_name;
|
||
case DSC_X:
|
||
return dsc_x_get_func_name;
|
||
case DSC_VRFL:
|
||
return dsc_vrfl_get_func_name;
|
||
}
|
||
}
|
||
|
||
static void dsc_convert_from_ac100_cloth_wet(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* cloth_wet = dsc_replace_add_func(dr, drd);
|
||
cloth_wet[0] = 0;
|
||
cloth_wet[1] = data[0];
|
||
}
|
||
|
||
static void dsc_convert_from_ac100_edit_face(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* edit_face = dsc_replace_add_func(dr, drd);
|
||
edit_face[0] = data[0];
|
||
}
|
||
|
||
static void dsc_convert_from_ac100_edit_motion(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* edit_motion = dsc_replace_add_func(dr, drd);
|
||
edit_motion[0] = data[0];
|
||
edit_motion[1] = data[1];
|
||
edit_motion[2] = 0;
|
||
edit_motion[3] = 0;
|
||
}
|
||
|
||
static void dsc_convert_from_ac100_effect(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* effect = dsc_replace_add_func(dr, drd);
|
||
effect[0] = 0;
|
||
effect[1] = data[0];
|
||
effect[2] = data[1];
|
||
effect[3] = data[2];
|
||
effect[4] = data[3];
|
||
effect[5] = data[4];
|
||
}
|
||
|
||
static void dsc_convert_from_ac100_expression(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* expression = dsc_replace_add_func(dr, drd);
|
||
expression[0] = 0;
|
||
expression[1] = data[0];
|
||
expression[2] = data[1];
|
||
expression[3] = data[2];
|
||
}
|
||
|
||
static void dsc_convert_from_ac100_eye_anim(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* eye_anim = dsc_replace_add_func(dr, drd);
|
||
eye_anim[0] = 0;
|
||
eye_anim[1] = data[0];
|
||
eye_anim[2] = data[1];
|
||
}
|
||
|
||
static void dsc_convert_from_ac100_hand_anim(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* hand_anim = dsc_replace_add_func(dr, drd);
|
||
hand_anim[0] = 0;
|
||
hand_anim[1] = data[0];
|
||
hand_anim[2] = data[1];
|
||
hand_anim[3] = data[2];
|
||
hand_anim[4] = data[3];
|
||
}
|
||
|
||
static void dsc_convert_from_ac100_look_anim(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* look_anim = dsc_replace_add_func(dr, drd);
|
||
look_anim[0] = 0;
|
||
look_anim[1] = data[0];
|
||
look_anim[2] = data[1];
|
||
look_anim[3] = data[2];
|
||
}
|
||
|
||
static void dsc_convert_from_ac100_look_camera(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* look_camera = dsc_replace_add_func(dr, drd);
|
||
look_camera[0] = 0;
|
||
look_camera[1] = data[0];
|
||
look_camera[2] = data[1];
|
||
look_camera[3] = data[2];
|
||
look_camera[4] = data[3];
|
||
}
|
||
|
||
static void dsc_convert_from_ac100_lyric(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* lyric = dsc_replace_add_func(dr, drd);
|
||
lyric[0] = data[0];
|
||
lyric[1] = 0xFFFFFFFF;
|
||
}
|
||
|
||
static void dsc_convert_from_ac100_miku_disp(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* miku_disp = dsc_replace_add_func(dr, drd);
|
||
miku_disp[0] = 0;
|
||
miku_disp[1] = data[0];
|
||
}
|
||
|
||
static void dsc_convert_from_ac100_miku_move(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* miku_move = dsc_replace_add_func(dr, drd);
|
||
miku_move[0] = 0;
|
||
miku_move[1] = data[0];
|
||
miku_move[2] = data[1];
|
||
miku_move[3] = data[2];
|
||
}
|
||
|
||
static void dsc_convert_from_ac100_miku_rot(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* miku_rot = dsc_replace_add_func(dr, drd);
|
||
miku_rot[0] = 0;
|
||
miku_rot[1] = data[0];
|
||
}
|
||
|
||
static void dsc_convert_from_ac100_miku_shadow(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* miku_shadow = dsc_replace_add_func(dr, drd);
|
||
miku_shadow[0] = 0;
|
||
miku_shadow[1] = data[0];
|
||
}
|
||
|
||
static void dsc_convert_from_ac100_mode_select(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* mode_select = dsc_replace_add_func(dr, drd);
|
||
mode_select[0] = 0x1F;
|
||
mode_select[1] = data[0];
|
||
}
|
||
|
||
static void dsc_convert_from_ac100_mouth_anim(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* mouth_anim = dsc_replace_add_func(dr, drd);
|
||
mouth_anim[0] = 0;
|
||
mouth_anim[1] = 0;
|
||
mouth_anim[2] = data[0];
|
||
mouth_anim[3] = data[1];
|
||
mouth_anim[4] = data[2];
|
||
}
|
||
|
||
static void dsc_convert_from_ac100_move_camera(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* move_camera = dsc_replace_add_func(dr, drd);
|
||
memmove(move_camera, data, sizeof(uint32_t) * 19);
|
||
move_camera[19] = 0;
|
||
move_camera[20] = 1000;
|
||
}
|
||
|
||
static void dsc_convert_from_ac100_set_motion(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* set_motion = dsc_replace_add_func(dr, drd);
|
||
set_motion[0] = 0;
|
||
set_motion[1] = data[0];
|
||
set_motion[2] = data[1];
|
||
set_motion[3] = data[2];
|
||
}
|
||
|
||
static void dsc_convert_from_ac100_set_playdata(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* set_playdata = dsc_replace_add_func(dr, drd);
|
||
set_playdata[0] = 0;
|
||
set_playdata[1] = data[0];
|
||
}
|
||
|
||
static void dsc_convert_from_ac100_shadowheight(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* shadowheight = dsc_replace_add_func(dr, drd);
|
||
shadowheight[0] = 0;
|
||
shadowheight[1] = data[0];
|
||
}
|
||
|
||
static void dsc_convert_from_ac100_shadowpos(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* shadowpos = dsc_replace_add_func(dr, drd);
|
||
shadowpos[0] = 0;
|
||
shadowpos[1] = data[0];
|
||
shadowpos[2] = data[1];
|
||
}
|
||
|
||
static void dsc_convert_to_ac100_cloth_wet(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
if (data[0])
|
||
return;
|
||
|
||
uint32_t* cloth_wet = dsc_replace_add_func(dr, drd);
|
||
cloth_wet[0] = data[1];
|
||
}
|
||
|
||
static void dsc_convert_to_ac100_edit_face(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* edit_face = dsc_replace_add_func(dr, drd);
|
||
edit_face[0] = data[0];
|
||
edit_face[1] = -1;
|
||
}
|
||
|
||
static void dsc_convert_to_ac100_edit_motion(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* edit_motion = dsc_replace_add_func(dr, drd);
|
||
edit_motion[0] = data[0];
|
||
edit_motion[1] = data[1];
|
||
}
|
||
|
||
static void dsc_convert_to_ac100_effect(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
if (data[0])
|
||
return;
|
||
|
||
uint32_t* effect = dsc_replace_add_func(dr, drd);
|
||
effect[0] = data[1];
|
||
effect[1] = data[2];
|
||
effect[2] = data[3];
|
||
effect[3] = data[4];
|
||
effect[4] = data[5];
|
||
}
|
||
|
||
static void dsc_convert_to_ac100_expression(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
if (data[0])
|
||
return;
|
||
|
||
uint32_t* expression = dsc_replace_add_func(dr, drd);
|
||
expression[0] = data[1];
|
||
expression[1] = data[2];
|
||
expression[2] = data[3];
|
||
expression[3] = data[4];
|
||
}
|
||
|
||
static void dsc_convert_to_ac100_eye_anim(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
if (data[0])
|
||
return;
|
||
|
||
uint32_t* eye_anim = dsc_replace_add_func(dr, drd);
|
||
eye_anim[0] = data[1];
|
||
eye_anim[1] = data[2];
|
||
}
|
||
|
||
static void dsc_convert_to_ac100_hand_anim(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
if (data[0])
|
||
return;
|
||
|
||
uint32_t* hand_anim = dsc_replace_add_func(dr, drd);
|
||
hand_anim[0] = data[1];
|
||
hand_anim[1] = data[2];
|
||
hand_anim[2] = data[3];
|
||
hand_anim[3] = data[4];
|
||
}
|
||
|
||
static void dsc_convert_to_ac100_look_anim(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
if (data[0])
|
||
return;
|
||
|
||
uint32_t* look_anim = dsc_replace_add_func(dr, drd);
|
||
look_anim[0] = data[1];
|
||
look_anim[1] = data[2];
|
||
look_anim[2] = data[3];
|
||
}
|
||
|
||
static void dsc_convert_to_ac100_look_camera(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
if (data[0])
|
||
return;
|
||
|
||
uint32_t* look_camera = dsc_replace_add_func(dr, drd);
|
||
look_camera[0] = data[1];
|
||
look_camera[1] = data[2];
|
||
look_camera[2] = data[3];
|
||
look_camera[3] = data[4];
|
||
}
|
||
|
||
static void dsc_convert_to_ac100_lyric(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* lyric = dsc_replace_add_func(dr, drd);
|
||
lyric[0] = data[0];
|
||
}
|
||
|
||
static void dsc_convert_to_ac100_miku_disp(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
if (data[0])
|
||
return;
|
||
|
||
uint32_t* miku_disp = dsc_replace_add_func(dr, drd);
|
||
miku_disp[0] = data[1];
|
||
}
|
||
|
||
static void dsc_convert_to_ac100_miku_move(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
if (data[0])
|
||
return;
|
||
|
||
uint32_t* miku_move = dsc_replace_add_func(dr, drd);
|
||
miku_move[0] = data[1];
|
||
miku_move[1] = data[2];
|
||
miku_move[2] = data[3];
|
||
}
|
||
|
||
static void dsc_convert_to_ac100_miku_rot(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
if (data[0])
|
||
return;
|
||
|
||
uint32_t* miku_rot = dsc_replace_add_func(dr, drd);
|
||
miku_rot[0] = data[1];
|
||
}
|
||
|
||
static void dsc_convert_to_ac100_miku_shadow(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
if (data[0])
|
||
return;
|
||
|
||
uint32_t* miku_shadow = dsc_replace_add_func(dr, drd);
|
||
miku_shadow[0] = data[1];
|
||
}
|
||
|
||
static void dsc_convert_to_ac100_mode_select(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* mode_select = dsc_replace_add_func(dr, drd);
|
||
mode_select[0] = data[1];
|
||
}
|
||
|
||
static void dsc_convert_to_ac100_mouth_anim(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
if (data[0])
|
||
return;
|
||
|
||
uint32_t* mouth_anim = dsc_replace_add_func(dr, drd);
|
||
mouth_anim[0] = data[2];
|
||
mouth_anim[1] = data[3];
|
||
mouth_anim[2] = data[4];
|
||
}
|
||
|
||
static void dsc_convert_to_ac100_move_camera(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* move_camera = dsc_replace_add_func(dr, drd);
|
||
memmove(move_camera, data, sizeof(uint32_t) * 19);
|
||
}
|
||
|
||
static void dsc_convert_to_ac100_set_motion(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
if (data[0])
|
||
return;
|
||
|
||
uint32_t* set_motion = dsc_replace_add_func(dr, drd);
|
||
set_motion[0] = data[1];
|
||
set_motion[1] = data[2];
|
||
set_motion[2] = data[3];
|
||
}
|
||
|
||
static void dsc_convert_to_ac100_set_playdata(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
if (data[0])
|
||
return;
|
||
|
||
uint32_t* set_playdata = dsc_replace_add_func(dr, drd);
|
||
set_playdata[0] = data[1];
|
||
}
|
||
|
||
static void dsc_convert_to_ac100_shadowheight(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
if (data[0])
|
||
return;
|
||
|
||
uint32_t* shadowheight = dsc_replace_add_func(dr, drd);
|
||
shadowheight[0] = data[1];
|
||
}
|
||
|
||
static void dsc_convert_to_ac100_shadowpos(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
if (data[0])
|
||
return;
|
||
|
||
uint32_t* shadowpos = dsc_replace_add_func(dr, drd);
|
||
shadowpos[0] = data[1];
|
||
shadowpos[1] = data[2];
|
||
}
|
||
|
||
static void dsc_convert_change_field1_to_change_field2(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* change_field1 = dsc_replace_add_func(dr, drd);
|
||
change_field1[0] = data[0];
|
||
change_field1[1] = 1;
|
||
}
|
||
|
||
static void dsc_convert_change_field2_to_change_field1(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
uint32_t* change_field1 = dsc_replace_add_func(dr, drd);
|
||
change_field1[0] = data[0];
|
||
}
|
||
|
||
static void dsc_convert_dummy(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
|
||
}
|
||
|
||
static void dsc_convert_note7_to_note11(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
dsc_note7* dn = (dsc_note7*)data;
|
||
dsc_note11* note11 = (dsc_note11*)dsc_replace_add_func(dr, drd);
|
||
note11->type = dn->type;
|
||
note11->hold_timer = -1;
|
||
note11->hold_end = -1;
|
||
note11->x_pos = dn->x_pos;
|
||
note11->y_pos = dn->y_pos;
|
||
note11->angle = dn->angle;
|
||
note11->wave_count = dn->wave_count;
|
||
note11->distance = dn->distance;
|
||
note11->amplitude = dn->amplitude;
|
||
note11->target_flying_time = dr->target_flying_time;
|
||
note11->time_signature = dr->target_flying_time != -1000 ? dr->time_signature : 0;
|
||
}
|
||
|
||
static void dsc_convert_note7_to_note12(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
dsc_note7* dn = (dsc_note7*)data;
|
||
dsc_note12* note12 = (dsc_note12*)dsc_replace_add_func(dr, drd);
|
||
note12->type = dn->type;
|
||
note12->hold_timer = -1;
|
||
note12->hold_end = -1;
|
||
note12->x_pos = dn->x_pos;
|
||
note12->y_pos = dn->y_pos;
|
||
note12->angle = dn->angle;
|
||
note12->wave_count = dn->wave_count;
|
||
note12->distance = dn->distance;
|
||
note12->amplitude = dn->amplitude;
|
||
note12->target_flying_time = dr->target_flying_time;
|
||
note12->time_signature = dr->target_flying_time != -1000 ? dr->time_signature : 0;
|
||
note12->target_effect = -1;
|
||
}
|
||
|
||
static void dsc_convert_note11_to_note7(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
dsc_note11* dn = (dsc_note11*)data;
|
||
if (dn->target_flying_time != -1000) {
|
||
if (dr->time_signature != dn->time_signature) {
|
||
dsc_replace_data* repl_data = &dr->replace_data[dr->bar_time_set_func_id];
|
||
uint32_t* bar_time_set = dsc_replace_add_func(dr, repl_data);
|
||
*bar_time_set++ = dr->bpm;
|
||
*bar_time_set++ = dn->time_signature;
|
||
dr->time_signature = dn->time_signature;
|
||
}
|
||
|
||
if (dr->target_flying_time != dn->target_flying_time) {
|
||
dsc_replace_data* repl_data = &dr->replace_data[dr->target_flying_time_func_id];
|
||
uint32_t* target_flying_time = dsc_replace_add_func(dr, repl_data);
|
||
*target_flying_time++ = dn->target_flying_time;
|
||
dr->target_flying_time = dn->target_flying_time;
|
||
}
|
||
}
|
||
|
||
dsc_note7* note7 = (dsc_note7*)dsc_replace_add_func(dr, drd);
|
||
note7->type = dn->type;
|
||
note7->x_pos = dn->x_pos;
|
||
note7->y_pos = dn->y_pos;
|
||
note7->angle = dn->angle;
|
||
note7->distance = dn->distance;
|
||
note7->amplitude = dn->amplitude;
|
||
note7->wave_count = dn->wave_count;
|
||
}
|
||
|
||
static void dsc_convert_note11_to_note12(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
dsc_note11* dn = (dsc_note11*)data;
|
||
dsc_note12* note12 = (dsc_note12*)dsc_replace_add_func(dr, drd);
|
||
note12->type = dn->type;
|
||
note12->hold_timer = dn->hold_timer;
|
||
note12->hold_end = dn->hold_end;
|
||
note12->x_pos = dn->x_pos;
|
||
note12->y_pos = dn->y_pos;
|
||
note12->angle = dn->angle;
|
||
note12->wave_count = dn->wave_count;
|
||
note12->distance = dn->distance;
|
||
note12->amplitude = dn->amplitude;
|
||
note12->target_flying_time = dn->target_flying_time;
|
||
note12->time_signature = dn->time_signature;
|
||
note12->target_effect = -1;
|
||
}
|
||
|
||
static void dsc_convert_note12_to_note7(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
dsc_note12* dn = (dsc_note12*)data;
|
||
if (dn->target_flying_time != -1000) {
|
||
if (dr->time_signature != dn->time_signature) {
|
||
dsc_replace_data* repl_data = &dr->replace_data[dr->bar_time_set_func_id];
|
||
uint32_t* bar_time_set = dsc_replace_add_func(dr, repl_data);
|
||
*bar_time_set++ = dr->bpm;
|
||
*bar_time_set++ = dn->time_signature;
|
||
dr->time_signature = dn->time_signature;
|
||
}
|
||
|
||
if (dr->target_flying_time != dn->target_flying_time) {
|
||
dsc_replace_data* repl_data = &dr->replace_data[dr->target_flying_time_func_id];
|
||
uint32_t* target_flying_time = dsc_replace_add_func(dr, repl_data);
|
||
*target_flying_time++ = dn->target_flying_time;
|
||
dr->target_flying_time = dn->target_flying_time;
|
||
}
|
||
}
|
||
|
||
dsc_note7* note7 = (dsc_note7*)dsc_replace_add_func(dr, drd);
|
||
note7->type = dn->type;
|
||
note7->x_pos = dn->x_pos;
|
||
note7->y_pos = dn->y_pos;
|
||
note7->angle = dn->angle;
|
||
note7->distance = dn->distance;
|
||
note7->amplitude = dn->amplitude;
|
||
note7->wave_count = dn->wave_count;
|
||
}
|
||
|
||
static void dsc_convert_note12_to_note11(dsc_replace* dr, dsc_replace_data* drd, uint32_t* data) {
|
||
dsc_note12* dn = (dsc_note12*)data;
|
||
dsc_note11* note11 = (dsc_note11*)dsc_replace_add_func(dr, drd);
|
||
note11->type = dn->type;
|
||
note11->hold_timer = dn->hold_timer;
|
||
note11->hold_end = dn->hold_end;
|
||
note11->x_pos = dn->x_pos;
|
||
note11->y_pos = dn->y_pos;
|
||
note11->angle = dn->angle;
|
||
note11->wave_count = dn->wave_count;
|
||
note11->distance = dn->distance;
|
||
note11->amplitude = dn->amplitude;
|
||
note11->target_flying_time = dn->target_flying_time;
|
||
note11->time_signature = dn->time_signature;
|
||
}
|
||
|
||
uint32_t* dsc::add_func(const char* name, int32_t func, int32_t func_length) {
|
||
dsc_data dsc_d;
|
||
dsc_d.name = name;
|
||
dsc_d.func = func;
|
||
dsc_d.data_offset = (uint32_t)data_buffer.size();
|
||
data.push_back(dsc_d);
|
||
|
||
data_buffer.resize((size_t)dsc_d.data_offset + func_length);
|
||
return data_buffer.data() + dsc_d.data_offset;
|
||
}
|
||
|
||
inline static uint32_t* dsc_replace_add_func(dsc_replace* dr, dsc_replace_data* drd) {
|
||
return dr->dsc.add_func(drd->name, drd->func_id, drd->length);
|
||
}
|
||
|
||
dsc::dsc(dsc_type type, uint32_t signature, uint32_t id) : type(type), signature(signature), id(id) {
|
||
|
||
}
|
||
|
||
dsc::~dsc() {
|
||
|
||
}
|
||
|
||
static size_t dsc_data_time_radix_index_func_pv_branch_mode(dsc_data_time* data, size_t index);
|
||
static size_t dsc_data_time_radix_index_func_time(dsc_data_time* data, size_t index);
|
||
|
||
static size_t dsc_data_time_radix_index_func_pv_branch_mode(dsc_data_time* data, size_t index) {
|
||
return (size_t)(ssize_t)data[index].pv_branch_mode;
|
||
}
|
||
|
||
static size_t dsc_data_time_radix_index_func_time(dsc_data_time* data, size_t index) {
|
||
return (size_t)(ssize_t)data[index].time;
|
||
}
|
||
|
||
void dsc::convert(dsc_type dst_type) {
|
||
if (type < DSC_AC101 || type > DSC_VRFL || dst_type < DSC_AC101 || dst_type > DSC_VRFL)
|
||
return;
|
||
|
||
static const dsc_func_convert dsc_convert_ac100[3][21] = {
|
||
{
|
||
(dsc_func_convert)0,
|
||
(dsc_func_convert)0,
|
||
(dsc_func_convert)0,
|
||
(dsc_func_convert)0,
|
||
(dsc_func_convert)0,
|
||
(dsc_func_convert)0,
|
||
(dsc_func_convert)0,
|
||
(dsc_func_convert)0,
|
||
(dsc_func_convert)0,
|
||
(dsc_func_convert)0,
|
||
(dsc_func_convert)0,
|
||
(dsc_func_convert)0,
|
||
(dsc_func_convert)0,
|
||
(dsc_func_convert)0,
|
||
(dsc_func_convert)0,
|
||
(dsc_func_convert)0,
|
||
(dsc_func_convert)0,
|
||
(dsc_func_convert)0,
|
||
(dsc_func_convert)0,
|
||
(dsc_func_convert)0,
|
||
(dsc_func_convert)0,
|
||
},
|
||
{
|
||
(dsc_func_convert)dsc_convert_to_ac100_miku_move,
|
||
(dsc_func_convert)dsc_convert_to_ac100_miku_rot,
|
||
(dsc_func_convert)dsc_convert_to_ac100_miku_disp,
|
||
(dsc_func_convert)dsc_convert_to_ac100_miku_shadow,
|
||
(dsc_func_convert)dsc_convert_to_ac100_set_motion,
|
||
(dsc_func_convert)dsc_convert_to_ac100_set_playdata,
|
||
(dsc_func_convert)dsc_convert_to_ac100_effect,
|
||
(dsc_func_convert)dsc_convert_to_ac100_eye_anim,
|
||
(dsc_func_convert)dsc_convert_to_ac100_mouth_anim,
|
||
(dsc_func_convert)dsc_convert_to_ac100_hand_anim,
|
||
(dsc_func_convert)dsc_convert_to_ac100_look_anim,
|
||
(dsc_func_convert)dsc_convert_to_ac100_expression,
|
||
(dsc_func_convert)dsc_convert_to_ac100_look_camera,
|
||
(dsc_func_convert)dsc_convert_to_ac100_lyric,
|
||
(dsc_func_convert)dsc_convert_to_ac100_mode_select,
|
||
(dsc_func_convert)dsc_convert_to_ac100_edit_motion,
|
||
(dsc_func_convert)dsc_convert_to_ac100_shadowheight,
|
||
(dsc_func_convert)dsc_convert_to_ac100_edit_face,
|
||
(dsc_func_convert)dsc_convert_to_ac100_move_camera,
|
||
(dsc_func_convert)dsc_convert_to_ac100_shadowpos,
|
||
(dsc_func_convert)dsc_convert_to_ac100_cloth_wet,
|
||
},
|
||
{
|
||
(dsc_func_convert)dsc_convert_from_ac100_miku_move,
|
||
(dsc_func_convert)dsc_convert_from_ac100_miku_rot,
|
||
(dsc_func_convert)dsc_convert_from_ac100_miku_disp,
|
||
(dsc_func_convert)dsc_convert_from_ac100_miku_shadow,
|
||
(dsc_func_convert)dsc_convert_from_ac100_set_motion,
|
||
(dsc_func_convert)dsc_convert_from_ac100_set_playdata,
|
||
(dsc_func_convert)dsc_convert_from_ac100_effect,
|
||
(dsc_func_convert)dsc_convert_from_ac100_eye_anim,
|
||
(dsc_func_convert)dsc_convert_from_ac100_mouth_anim,
|
||
(dsc_func_convert)dsc_convert_from_ac100_hand_anim,
|
||
(dsc_func_convert)dsc_convert_from_ac100_look_anim,
|
||
(dsc_func_convert)dsc_convert_from_ac100_expression,
|
||
(dsc_func_convert)dsc_convert_from_ac100_look_camera,
|
||
(dsc_func_convert)dsc_convert_from_ac100_lyric,
|
||
(dsc_func_convert)dsc_convert_from_ac100_mode_select,
|
||
(dsc_func_convert)dsc_convert_from_ac100_edit_motion,
|
||
(dsc_func_convert)dsc_convert_from_ac100_shadowheight,
|
||
(dsc_func_convert)dsc_convert_from_ac100_move_camera,
|
||
(dsc_func_convert)dsc_convert_from_ac100_edit_face,
|
||
(dsc_func_convert)dsc_convert_from_ac100_shadowpos,
|
||
(dsc_func_convert)dsc_convert_from_ac100_cloth_wet,
|
||
},
|
||
};
|
||
|
||
static const dsc_func_convert change_field_convert_func_array[2][2] = {
|
||
{
|
||
(dsc_func_convert)0,
|
||
(dsc_func_convert)dsc_convert_change_field1_to_change_field2,
|
||
},
|
||
{
|
||
(dsc_func_convert)dsc_convert_change_field2_to_change_field1,
|
||
(dsc_func_convert)0,
|
||
},
|
||
};
|
||
|
||
static const dsc_func_convert edit_camera_convert_func_array[2][2] = {
|
||
{
|
||
(dsc_func_convert)0,
|
||
(dsc_func_convert)dsc_convert_dummy,
|
||
},
|
||
{
|
||
(dsc_func_convert)dsc_convert_dummy,
|
||
(dsc_func_convert)0,
|
||
},
|
||
};
|
||
|
||
static const dsc_func_convert note_convert_func_array[3][3] = {
|
||
{
|
||
(dsc_func_convert)0,
|
||
(dsc_func_convert)dsc_convert_note7_to_note11,
|
||
(dsc_func_convert)dsc_convert_note7_to_note12,
|
||
},
|
||
{
|
||
(dsc_func_convert)dsc_convert_note11_to_note7,
|
||
(dsc_func_convert)0,
|
||
(dsc_func_convert)dsc_convert_note11_to_note12,
|
||
},
|
||
{
|
||
(dsc_func_convert)dsc_convert_note12_to_note7,
|
||
(dsc_func_convert)dsc_convert_note12_to_note11,
|
||
(dsc_func_convert)0,
|
||
},
|
||
};
|
||
|
||
static const dsc_func_convert vr_live_transform_convert_func_array[2][2] = {
|
||
{
|
||
(dsc_func_convert)0,
|
||
(dsc_func_convert)dsc_convert_dummy,
|
||
},
|
||
{
|
||
(dsc_func_convert)dsc_convert_dummy,
|
||
(dsc_func_convert)0,
|
||
},
|
||
};
|
||
|
||
bool src_has_perf_id = signature >= 0x10101514;
|
||
int32_t dsc_convert_ac100_type = src_has_perf_id ? 0 : 2;
|
||
|
||
if (dsc_convert_ac100_type == 2 && signature < 0x10000000)
|
||
signature = 0x10101514;
|
||
|
||
bool dst_has_perf_id;
|
||
switch (dst_type) {
|
||
default:
|
||
dst_has_perf_id = signature >= 0x10101514;
|
||
break;
|
||
case DSC_PSP:
|
||
case DSC_DT:
|
||
case DSC_AC101:
|
||
case DSC_AC110:
|
||
case DSC_AC120:
|
||
dst_has_perf_id = false;
|
||
dsc_convert_ac100_type = src_has_perf_id ? 1 : 0;
|
||
break;
|
||
}
|
||
|
||
if (dsc_convert_ac100_type == 1)
|
||
signature = 0;
|
||
|
||
int32_t note_convert_src;
|
||
switch (type) {
|
||
default:
|
||
note_convert_src = 0;
|
||
break;
|
||
case DSC_2ND:
|
||
note_convert_src = 1;
|
||
break;
|
||
case DSC_DT2:
|
||
case DSC_F:
|
||
note_convert_src = src_has_perf_id ? 1 : 0;
|
||
break;
|
||
case DSC_F2:
|
||
case DSC_MGF:
|
||
case DSC_X:
|
||
case DSC_VRFL:
|
||
note_convert_src = 2;
|
||
break;
|
||
}
|
||
|
||
int32_t note_convert_dst;
|
||
switch (dst_type) {
|
||
default:
|
||
note_convert_dst = 0;
|
||
break;
|
||
case DSC_2ND:
|
||
note_convert_dst = 1;
|
||
break;
|
||
case DSC_DT2:
|
||
case DSC_F:
|
||
note_convert_dst = dst_has_perf_id ? 1 : 0;
|
||
break;
|
||
case DSC_F2:
|
||
case DSC_MGF:
|
||
case DSC_X:
|
||
case DSC_VRFL:
|
||
note_convert_dst = 2;
|
||
break;
|
||
}
|
||
|
||
bool enable_edit_camera = ((note_convert_src == 0 || note_convert_src == 1)
|
||
&& (note_convert_dst == 0 || note_convert_dst == 1)
|
||
|| note_convert_src == 2 && note_convert_dst == 2);
|
||
bool enable_edit_camera_ac = (note_convert_src == 0 || note_convert_src == 1)
|
||
&& (note_convert_dst == 0 || note_convert_dst == 1) && dst_has_perf_id;
|
||
|
||
dsc_replace dr(type, dst_type, dst_has_perf_id);
|
||
|
||
int32_t src_func_count = dsc_type_get_dsc_func_count(type);
|
||
dsc_get_func_name src_get_func_name = dsc_type_get_dsc_get_func_name(type);
|
||
|
||
for (int32_t i = 0; i < src_func_count; i++) {
|
||
dsc_replace_data* repl_data = &dr.replace_data[i];
|
||
const char* src_func_name = src_get_func_name(i);
|
||
uint64_t src_func_name_hash = hash_utf8_fnv1a64m(src_func_name);
|
||
if (!repl_data->func && src_func_name_hash == hash_utf8_fnv1a64m("MIKU_MOVE"))
|
||
repl_data->func = dsc_convert_ac100[dsc_convert_ac100_type][0];
|
||
else if (!repl_data->func && src_func_name_hash == hash_utf8_fnv1a64m("MIKU_ROT"))
|
||
repl_data->func = dsc_convert_ac100[dsc_convert_ac100_type][1];
|
||
else if (!repl_data->func && src_func_name_hash == hash_utf8_fnv1a64m("MIKU_DISP"))
|
||
repl_data->func = dsc_convert_ac100[dsc_convert_ac100_type][2];
|
||
else if (!repl_data->func && src_func_name_hash == hash_utf8_fnv1a64m("MIKU_SHADOW"))
|
||
repl_data->func = dsc_convert_ac100[dsc_convert_ac100_type][3];
|
||
else if (!repl_data->func && src_func_name_hash == hash_utf8_fnv1a64m("TARGET"))
|
||
repl_data->func = note_convert_func_array[note_convert_src][note_convert_dst];
|
||
else if (!repl_data->func && src_func_name_hash == hash_utf8_fnv1a64m("SET_MOTION"))
|
||
repl_data->func = dsc_convert_ac100[dsc_convert_ac100_type][4];
|
||
else if (!repl_data->func && src_func_name_hash == hash_utf8_fnv1a64m("SET_PLAYDATA"))
|
||
repl_data->func = dsc_convert_ac100[dsc_convert_ac100_type][5];
|
||
else if (!repl_data->func && src_func_name_hash == hash_utf8_fnv1a64m("EFFECT"))
|
||
repl_data->func = dsc_convert_ac100[dsc_convert_ac100_type][6];
|
||
else if (!repl_data->func && src_func_name_hash == hash_utf8_fnv1a64m("CHANGE_FIELD"))
|
||
repl_data->func = change_field_convert_func_array
|
||
[note_convert_src == 2 ? 1 : 0][note_convert_dst == 2 ? 1 : 0];
|
||
else if (!repl_data->func && src_func_name_hash == hash_utf8_fnv1a64m("EYE_ANIM"))
|
||
repl_data->func = dsc_convert_ac100[dsc_convert_ac100_type][7];
|
||
else if (!repl_data->func && src_func_name_hash == hash_utf8_fnv1a64m("MOUTH_ANIM"))
|
||
repl_data->func = dsc_convert_ac100[dsc_convert_ac100_type][8];
|
||
else if (!repl_data->func && src_func_name_hash == hash_utf8_fnv1a64m("HAND_ANIM"))
|
||
repl_data->func = dsc_convert_ac100[dsc_convert_ac100_type][9];
|
||
else if (!repl_data->func && src_func_name_hash == hash_utf8_fnv1a64m("LOOK_ANIM"))
|
||
repl_data->func = dsc_convert_ac100[dsc_convert_ac100_type][10];
|
||
else if (!repl_data->func && src_func_name_hash == hash_utf8_fnv1a64m("EXPRESSION"))
|
||
repl_data->func = dsc_convert_ac100[dsc_convert_ac100_type][11];
|
||
else if (!repl_data->func && src_func_name_hash == hash_utf8_fnv1a64m("LOOK_CAMERA"))
|
||
repl_data->func = dsc_convert_ac100[dsc_convert_ac100_type][12];
|
||
else if (!repl_data->func && src_func_name_hash == hash_utf8_fnv1a64m("LYRIC"))
|
||
repl_data->func = dsc_convert_ac100[dsc_convert_ac100_type][13];
|
||
else if (!repl_data->func && src_func_name_hash == hash_utf8_fnv1a64m("MODE_SELECT"))
|
||
repl_data->func = dsc_convert_ac100[dsc_convert_ac100_type][14];
|
||
else if (!repl_data->func && src_func_name_hash == hash_utf8_fnv1a64m("EDIT_MOTION"))
|
||
repl_data->func = dsc_convert_ac100[dsc_convert_ac100_type][15];
|
||
else if (dr.bar_time_set_func_id == -1
|
||
&& src_func_name_hash == hash_utf8_fnv1a64m("BAR_TIME_SET"))
|
||
dr.bar_time_set_func_id = i;
|
||
else if (!repl_data->func && src_func_name_hash == hash_utf8_fnv1a64m("SHADOWHEIGHT"))
|
||
repl_data->func = dsc_convert_ac100[dsc_convert_ac100_type][16];
|
||
else if (!repl_data->func && src_func_name_hash == hash_utf8_fnv1a64m("EDIT_FACE"))
|
||
repl_data->func = dsc_convert_ac100[dsc_convert_ac100_type][17];
|
||
else if (!repl_data->func && src_func_name_hash == hash_utf8_fnv1a64m("MOVE_CAMERA"))
|
||
repl_data->func = dsc_convert_ac100[dsc_convert_ac100_type][18];
|
||
else if (!repl_data->func && src_func_name_hash == hash_utf8_fnv1a64m("SHADOWPOS"))
|
||
repl_data->func = dsc_convert_ac100[dsc_convert_ac100_type][19];
|
||
else if (!repl_data->func && src_func_name_hash == hash_utf8_fnv1a64m("CLOTH_WET"))
|
||
repl_data->func = dsc_convert_ac100[dsc_convert_ac100_type][20];
|
||
else if (dr.target_flying_time_func_id == -1
|
||
&& src_func_name_hash == hash_utf8_fnv1a64m("TARGET_FLYING_TIME"))
|
||
dr.target_flying_time_func_id = i;
|
||
else if (!repl_data->func && src_func_name_hash == hash_utf8_fnv1a64m("EDIT_CAMERA"))
|
||
repl_data->func = edit_camera_convert_func_array
|
||
[note_convert_src == 2 ? 1 : 0][note_convert_dst == 2 ? 1 : 0];
|
||
else if (!repl_data->func && src_func_name_hash == hash_utf8_fnv1a64m("VR_LIVE_TRANSFORM"))
|
||
repl_data->func = vr_live_transform_convert_func_array
|
||
[type == DSC_VRFL][dst_type == DSC_VRFL];
|
||
}
|
||
|
||
for (dsc_data& i : data) {
|
||
int32_t func = i.func;
|
||
if (func == -1 || dr.replace_data[func].func_id == -1)
|
||
continue;
|
||
|
||
uint32_t* data = get_func_data(&i);
|
||
dsc_replace_data* repl_data = &dr.replace_data[func];
|
||
if (func == dr.bar_time_set_func_id) {
|
||
dr.bpm = data[0];
|
||
dr.time_signature = data[1];
|
||
dr.target_flying_time = -1000;
|
||
|
||
uint32_t* bar_time_set = dsc_replace_add_func(&dr, repl_data);
|
||
*bar_time_set++ = dr.bpm;
|
||
*bar_time_set++ = dr.time_signature;
|
||
}
|
||
else if (func == dr.target_flying_time_func_id) {
|
||
dr.target_flying_time = data[0];
|
||
|
||
uint32_t* target_flying_time = dsc_replace_add_func(&dr, repl_data);
|
||
*target_flying_time++ = dr.target_flying_time;
|
||
}
|
||
else if (dr.replace_data[func].func)
|
||
dr.replace_data[func].func(&dr, repl_data, data);
|
||
else {
|
||
uint32_t* dst_data = dsc_replace_add_func(&dr, repl_data);
|
||
memmove(dst_data, data, sizeof(uint32_t) * repl_data->length);
|
||
}
|
||
}
|
||
|
||
data.clear();
|
||
data.shrink_to_fit();
|
||
data_buffer.clear();
|
||
data_buffer.shrink_to_fit();
|
||
|
||
type = dr.dst_type;
|
||
switch (type) {
|
||
case DSC_F:
|
||
if (signature >= 0x10000000)
|
||
signature = 0x12020220;
|
||
break;
|
||
case DSC_F2:
|
||
case DSC_MGF:
|
||
case DSC_X:
|
||
case DSC_VRFL:
|
||
signature = 0x13120420;
|
||
id = 0;
|
||
break;
|
||
}
|
||
data = dr.dsc.data;
|
||
data_buffer = dr.dsc.data_buffer;
|
||
}
|
||
|
||
void dsc::rebuild() {
|
||
dsc_get_func_id get_func_id = dsc_type_get_dsc_get_func_id(type);
|
||
dsc_get_func_length get_func_length = get_dsc_get_func_length();
|
||
dsc_get_func_name get_func_name = dsc_type_get_dsc_get_func_name(type);
|
||
|
||
int32_t time_func_id = get_func_id("TIME");
|
||
int32_t pv_branch_mode_func_id = get_func_id("PV_BRANCH_MODE");
|
||
|
||
const char* time_func_name = get_func_name(time_func_id);
|
||
const char* pv_branch_mode_func_name = get_func_name(pv_branch_mode_func_id);
|
||
|
||
int32_t time_func_length = get_func_length(time_func_id);
|
||
int32_t pv_branch_mode_func_length = get_func_length(pv_branch_mode_func_id);
|
||
|
||
size_t func_count = data.size();
|
||
size_t size = 0;
|
||
for (dsc_data& j : data)
|
||
if (j.func == time_func_id || j.func == pv_branch_mode_func_id)
|
||
func_count--;
|
||
else
|
||
size += get_func_length(j.func);
|
||
|
||
std::vector<dsc_data_time> data_time;
|
||
std::vector<uint32_t> data_time_buffer;
|
||
data_time.reserve(func_count);
|
||
data_time_buffer.reserve(size);
|
||
|
||
int32_t time = -1;
|
||
int32_t pv_branch_mode = 0;
|
||
for (dsc_data& j : data) {
|
||
if (j.func == time_func_id) {
|
||
time = (int32_t)get_func_data(&j)[0];
|
||
continue;
|
||
}
|
||
else if (j.func == pv_branch_mode_func_id) {
|
||
pv_branch_mode = (int32_t)get_func_data(&j)[0];
|
||
continue;
|
||
}
|
||
|
||
dsc_data_time dsc_d;
|
||
dsc_d.time = time;
|
||
dsc_d.pv_branch_mode = pv_branch_mode;
|
||
dsc_d.name = j.name;
|
||
dsc_d.func = j.func;
|
||
dsc_d.data_offset = (uint32_t)data_time_buffer.size();
|
||
data_time.push_back(dsc_d);
|
||
|
||
uint32_t* func_data = get_func_data(&j);
|
||
int32_t func_length = get_func_length(j.func);
|
||
data_time_buffer.resize((size_t)dsc_d.data_offset + func_length);
|
||
memmove(data_time_buffer.data() + dsc_d.data_offset, func_data, sizeof(uint32_t) * func_length);
|
||
}
|
||
|
||
if (data_time.size()) {
|
||
for (dsc_data_time& i : data_time)
|
||
i.time = radix_preprocess_int32_t(i.time);
|
||
radix_sort_custom(data_time.data(), data_time.size(), sizeof(dsc_data_time),
|
||
sizeof(int32_t), (radix_index_func)dsc_data_time_radix_index_func_time);
|
||
for (dsc_data_time& i : data_time)
|
||
i.time = radix_postprocess_int32_t(i.time);
|
||
}
|
||
|
||
func_count = data_time.size();
|
||
size = 0;
|
||
|
||
time = -1;
|
||
int32_t time_count = 0;
|
||
for (dsc_data_time& i : data_time)
|
||
if (time != i.time) {
|
||
if (time_count > 1)
|
||
radix_sort_custom(&i - time_count, time_count, sizeof(dsc_data_time),
|
||
sizeof(int32_t), (radix_index_func)dsc_data_time_radix_index_func_pv_branch_mode);
|
||
time = i.time;
|
||
time_count = 1;
|
||
func_count++;
|
||
size++;
|
||
}
|
||
else
|
||
time_count++;
|
||
|
||
if (time_count > 1)
|
||
radix_sort_custom(&(data_time.end() - time_count)[0], time_count, sizeof(dsc_data_time),
|
||
sizeof(int32_t), (radix_index_func)dsc_data_time_radix_index_func_pv_branch_mode);
|
||
|
||
pv_branch_mode = -1;
|
||
int32_t pv_branch_mode_count = 0;
|
||
for (dsc_data_time& i : data_time)
|
||
if (pv_branch_mode != i.pv_branch_mode) {
|
||
pv_branch_mode = i.pv_branch_mode;
|
||
pv_branch_mode_count = 1;
|
||
func_count++;
|
||
size++;
|
||
}
|
||
else
|
||
pv_branch_mode_count++;
|
||
|
||
for (dsc_data_time& i : data_time)
|
||
size += get_func_length(i.func);
|
||
|
||
data.clear();
|
||
data_buffer.clear();
|
||
data.reserve(func_count);
|
||
data_buffer.reserve(size);
|
||
|
||
time = -1;
|
||
pv_branch_mode = -1;
|
||
for (dsc_data_time& i : data_time) {
|
||
if (time_func_id != -1 && time != i.time) {
|
||
time = i.time;
|
||
|
||
dsc_data dsc_d;
|
||
dsc_d.name = time_func_name;
|
||
dsc_d.func = time_func_id;
|
||
dsc_d.data_offset = (uint32_t)data_buffer.size();
|
||
data.push_back(dsc_d);
|
||
|
||
data_buffer.push_back(time);
|
||
}
|
||
|
||
if (pv_branch_mode_func_id != -1 && pv_branch_mode != i.pv_branch_mode) {
|
||
pv_branch_mode = i.pv_branch_mode;
|
||
|
||
dsc_data dsc_d;
|
||
dsc_d.name = pv_branch_mode_func_name;
|
||
dsc_d.func = pv_branch_mode_func_id;
|
||
dsc_d.data_offset = (uint32_t)data_buffer.size();
|
||
data.push_back(dsc_d);
|
||
|
||
data_buffer.push_back(pv_branch_mode);
|
||
}
|
||
|
||
uint32_t* data = add_func(get_func_name(i.func),
|
||
i.func, get_func_length(i.func));
|
||
memmove(data, data_time_buffer.data() + i.data_offset,
|
||
sizeof(uint32_t) * get_func_length(i.func));
|
||
}
|
||
}
|
||
|
||
dsc_get_func_length dsc::get_dsc_get_func_length() {
|
||
return dsc_type_get_dsc_get_func_length(type, signature >= 0x10101514);
|
||
}
|
||
|
||
uint32_t* dsc::get_func_data(dsc_data* data) {
|
||
return (uint32_t*)(data_buffer.data() + data->data_offset);
|
||
}
|
||
|
||
void dsc::merge(int32_t count, ...) {
|
||
va_list args;
|
||
va_start(args, count);
|
||
dsc* s0 = va_arg(args, dsc*);
|
||
if (!s0) {
|
||
va_end(args);
|
||
return;
|
||
}
|
||
|
||
for (int32_t i = 1; i < count; i++) {
|
||
dsc* d1 = va_arg(args, dsc*);
|
||
if (!d1 || s0->type != d1->type || s0->signature != d1->signature) {
|
||
va_end(args);
|
||
return;
|
||
}
|
||
}
|
||
va_end(args);
|
||
|
||
type = s0->type;
|
||
signature = s0->signature;
|
||
id = s0->id;
|
||
|
||
dsc_get_func_id get_func_id = dsc_type_get_dsc_get_func_id(s0->type);
|
||
dsc_get_func_length get_func_length = s0->get_dsc_get_func_length();
|
||
dsc_get_func_name get_func_name = dsc_type_get_dsc_get_func_name(s0->type);
|
||
|
||
int32_t time_func_id = get_func_id("TIME");
|
||
int32_t pv_branch_mode_func_id = get_func_id("PV_BRANCH_MODE");
|
||
|
||
const char* time_func_name = get_func_name(time_func_id);
|
||
const char* pv_branch_mode_func_name = get_func_name(pv_branch_mode_func_id);
|
||
|
||
int32_t time_func_length = get_func_length(time_func_id);
|
||
int32_t pv_branch_mode_func_length = get_func_length(pv_branch_mode_func_id);
|
||
|
||
size_t func_count = 0;
|
||
size_t size = 0;
|
||
va_start(args, count);
|
||
for (int32_t i = 0; i < count; i++) {
|
||
dsc* s = va_arg(args, dsc*);
|
||
func_count += s->data.size();
|
||
for (dsc_data& j : s->data)
|
||
if (j.func == time_func_id || j.func == pv_branch_mode_func_id)
|
||
func_count--;
|
||
else
|
||
size += get_func_length(j.func);
|
||
}
|
||
va_end(args);
|
||
|
||
std::vector<dsc_data_time> data_time;
|
||
std::vector<uint32_t> data_time_buffer;
|
||
data_time.reserve(func_count);
|
||
data_time_buffer.reserve(size);
|
||
va_start(args, count);
|
||
for (int32_t i = 0; i < count; i++) {
|
||
dsc* s = va_arg(args, dsc*);
|
||
|
||
int32_t time = -1;
|
||
int32_t pv_branch_mode = 0;
|
||
for (dsc_data& j : s->data) {
|
||
if (j.func == time_func_id) {
|
||
time = (int32_t)s->get_func_data(&j)[0];
|
||
continue;
|
||
}
|
||
else if (j.func == pv_branch_mode_func_id) {
|
||
pv_branch_mode = (int32_t)s->get_func_data(&j)[0];
|
||
continue;
|
||
}
|
||
|
||
dsc_data_time dsc_d;
|
||
dsc_d.time = time;
|
||
dsc_d.pv_branch_mode = pv_branch_mode;
|
||
dsc_d.name = j.name;
|
||
dsc_d.func = j.func;
|
||
dsc_d.data_offset = (uint32_t)data_time_buffer.size();
|
||
data_time.push_back(dsc_d);
|
||
|
||
uint32_t* func_data = s->get_func_data(&j);
|
||
int32_t func_length = get_func_length(j.func);
|
||
data_time_buffer.resize((size_t)dsc_d.data_offset + func_length);
|
||
memmove(data_time_buffer.data() + dsc_d.data_offset, func_data, sizeof(uint32_t) * func_length);
|
||
}
|
||
}
|
||
va_end(args);
|
||
|
||
if (data_time.size()) {
|
||
for (dsc_data_time& i : data_time)
|
||
i.time = radix_preprocess_int32_t(i.time);
|
||
radix_sort_custom(data_time.data(), data_time.size(), sizeof(dsc_data_time),
|
||
sizeof(int32_t), (radix_index_func)dsc_data_time_radix_index_func_time);
|
||
for (dsc_data_time& i : data_time)
|
||
i.time = radix_postprocess_int32_t(i.time);
|
||
}
|
||
|
||
func_count = data_time.size();
|
||
size = 0;
|
||
|
||
int32_t time = -1;
|
||
int32_t time_count = 0;
|
||
for (dsc_data_time& i : data_time)
|
||
if (time != i.time) {
|
||
if (time_count > 1)
|
||
radix_sort_custom(&i - time_count, time_count, sizeof(dsc_data_time),
|
||
sizeof(int32_t), (radix_index_func)dsc_data_time_radix_index_func_pv_branch_mode);
|
||
time = i.time;
|
||
time_count = 1;
|
||
func_count++;
|
||
size++;
|
||
}
|
||
else
|
||
time_count++;
|
||
|
||
if (time_count > 1)
|
||
radix_sort_custom(&(data_time.end() - time_count)[0], time_count, sizeof(dsc_data_time),
|
||
sizeof(int32_t), (radix_index_func)dsc_data_time_radix_index_func_pv_branch_mode);
|
||
|
||
int32_t pv_branch_mode = -1;
|
||
int32_t pv_branch_mode_count = 0;
|
||
for (dsc_data_time& i : data_time)
|
||
if (pv_branch_mode != i.pv_branch_mode) {
|
||
pv_branch_mode = i.pv_branch_mode;
|
||
pv_branch_mode_count = 1;
|
||
func_count++;
|
||
size++;
|
||
}
|
||
else
|
||
pv_branch_mode_count++;
|
||
|
||
for (dsc_data_time& i : data_time)
|
||
size += get_func_length(i.func);
|
||
|
||
data.clear();
|
||
data_buffer.clear();
|
||
data.reserve(func_count);
|
||
data_buffer.reserve(size);
|
||
|
||
time = -1;
|
||
pv_branch_mode = -1;
|
||
for (dsc_data_time& i : data_time) {
|
||
if (time_func_id != -1 && time != i.time) {
|
||
time = i.time;
|
||
|
||
dsc_data dsc_d;
|
||
dsc_d.name = time_func_name;
|
||
dsc_d.func = time_func_id;
|
||
dsc_d.data_offset = (uint32_t)data_buffer.size();
|
||
data.push_back(dsc_d);
|
||
|
||
data_buffer.push_back(time);
|
||
}
|
||
|
||
if (pv_branch_mode_func_id != -1 && pv_branch_mode != i.pv_branch_mode) {
|
||
pv_branch_mode = i.pv_branch_mode;
|
||
|
||
dsc_data dsc_d;
|
||
dsc_d.name = pv_branch_mode_func_name;
|
||
dsc_d.func = pv_branch_mode_func_id;
|
||
dsc_d.data_offset = (uint32_t)data_buffer.size();
|
||
data.push_back(dsc_d);
|
||
|
||
data_buffer.push_back(pv_branch_mode);
|
||
}
|
||
|
||
uint32_t* data = add_func(get_func_name(i.func),
|
||
i.func, get_func_length(i.func));
|
||
memmove(data, data_time_buffer.data() + i.data_offset,
|
||
sizeof(uint32_t) * get_func_length(i.func));
|
||
}
|
||
}
|
||
|
||
bool dsc::parse(void* data, size_t size, dsc_type type) {
|
||
if (!data || !(size / 4) || type < DSC_AC101 || type > DSC_VRFL)
|
||
return false;
|
||
|
||
uint32_t* data_dsc = (uint32_t*)data;
|
||
|
||
f2_struct st;
|
||
signature = 0;
|
||
switch (type) {
|
||
default:
|
||
if (*data_dsc >= 0x10000000) {
|
||
signature = *data_dsc++;
|
||
size--;
|
||
}
|
||
break;
|
||
case DSC_F:
|
||
if (*data_dsc >= 0x10000000) {
|
||
if (*data_dsc != 0x12020220)
|
||
return false;
|
||
|
||
data_dsc++;
|
||
signature = 0x12020220;
|
||
}
|
||
break;
|
||
case DSC_F2:
|
||
case DSC_MGF:
|
||
case DSC_X:
|
||
case DSC_VRFL:
|
||
st.read(data, size);
|
||
data_dsc = (uint32_t*)st.data.data();
|
||
if (st.header.use_big_endian)
|
||
for (size_t i = size / 4; i; i--, data_dsc++)
|
||
*data_dsc = load_reverse_endianness_uint32_t(data_dsc);
|
||
|
||
data_dsc = (uint32_t*)st.data.data();
|
||
if (*data_dsc++ != 0x13120420) {
|
||
return false;
|
||
}
|
||
|
||
signature = 0x13120420;
|
||
id = *data_dsc++;
|
||
break;
|
||
}
|
||
|
||
size /= 4;
|
||
|
||
this->type = type;
|
||
|
||
dsc_get_func_name get_func_name = dsc_type_get_dsc_get_func_name(type);
|
||
dsc_get_func_length get_func_length = get_dsc_get_func_length();
|
||
|
||
size_t func_count = 0;
|
||
size_t data_size = 0;
|
||
uint32_t* func_data = data_dsc;
|
||
for (size_t i = 0; i < size; i++) {
|
||
if (!*func_data) {
|
||
size = i;
|
||
break;
|
||
}
|
||
|
||
int32_t func_length = get_func_length(*func_data++);
|
||
if (func_length < 0) {
|
||
size = i;
|
||
break;
|
||
}
|
||
|
||
data_size += func_length;
|
||
func_data += func_length;
|
||
i += func_length;
|
||
func_count++;
|
||
}
|
||
|
||
this->data.reserve(func_count);
|
||
data_buffer.reserve(data_size);
|
||
|
||
func_data = data_dsc;
|
||
for (size_t i = 0; i < func_count; i++) {
|
||
dsc_data data;
|
||
data.name = get_func_name(*func_data);
|
||
data.func = *func_data++;
|
||
data.data_offset = (uint32_t)data_buffer.size();
|
||
this->data.push_back(data);
|
||
|
||
int32_t func_length = get_func_length(data.func);
|
||
data_buffer.resize((size_t)data.data_offset + func_length);
|
||
memmove(data_buffer.data() + data.data_offset, func_data, sizeof(uint32_t) * func_length);
|
||
func_data += func_length;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
void dsc::unparse(void** data, size_t* size) {
|
||
if (!data || !size)
|
||
return;
|
||
|
||
dsc_get_func_length get_func_length = get_dsc_get_func_length();
|
||
|
||
bool f2 = false;
|
||
size_t s = 1;
|
||
switch (type) {
|
||
default:
|
||
if (signature >= 0x10000000)
|
||
s++;
|
||
break;
|
||
case DSC_F2:
|
||
case DSC_MGF:
|
||
case DSC_X:
|
||
case DSC_VRFL:
|
||
s += 2;
|
||
f2 = true;
|
||
break;
|
||
}
|
||
|
||
for (dsc_data& i : this->data)
|
||
s += get_func_length(i.func) + 1ULL;
|
||
|
||
size_t data_size = s;
|
||
if (f2)
|
||
data_size = align_val(s, 4);
|
||
|
||
f2_struct st;
|
||
uint32_t* data_dsc;
|
||
if (f2) {
|
||
st.data.resize(data_size * sizeof(uint32_t));
|
||
data_dsc = (uint32_t*)st.data.data();
|
||
}
|
||
else
|
||
data_dsc = force_malloc_s(uint32_t, data_size);
|
||
uint32_t* func_data = data_dsc;
|
||
|
||
switch (type) {
|
||
default:
|
||
if (signature >= 0x10000000)
|
||
*func_data++ = signature;
|
||
break;
|
||
case DSC_F:
|
||
if (signature >= 0x10000000)
|
||
*func_data++ = 0x12020220;
|
||
break;
|
||
case DSC_F2:
|
||
case DSC_MGF:
|
||
case DSC_X:
|
||
case DSC_VRFL:
|
||
*func_data++ = 0x13120420;
|
||
*func_data++ = id;
|
||
break;
|
||
}
|
||
|
||
for (dsc_data& i : this->data) {
|
||
*func_data++ = i.func;
|
||
uint32_t* data = this->get_func_data(&i);
|
||
for (int32_t j = get_func_length(i.func); j; j--)
|
||
*func_data++ = *data++;
|
||
}
|
||
*func_data++ = 0;
|
||
|
||
if (f2) {
|
||
enrs e;
|
||
enrs_entry ee;
|
||
|
||
ee = { 0, 1, 4, (uint32_t)s };
|
||
ee.append(0, 1, ENRS_DWORD);
|
||
e.vec.push_back(ee);
|
||
|
||
st.enrs = e;
|
||
|
||
st.header.signature = reverse_endianness_uint32_t('PVSC');
|
||
st.header.length = 0x40;
|
||
st.header.use_section_size = true;
|
||
st.header.inner_signature = 0x13120420;
|
||
st.write(data, size, true, false);
|
||
}
|
||
else {
|
||
*data = data_dsc;
|
||
*size = data_size * sizeof(uint32_t);
|
||
}
|
||
}
|
||
|
||
int32_t dsc::calculate_target_flying_time(int32_t bpm, int32_t time_signature) {
|
||
return (int32_t)((float_t)time_signature * (60.0f / (float_t)bpm) * 1000.0f);
|
||
}
|
||
|
||
bool dsc::load_file(void* data, const char* path, const char* file, uint32_t hash) {
|
||
std::string s = path + std::string(file);
|
||
|
||
stream dsc_s;
|
||
io_open(&dsc_s, s.c_str(), "rb");
|
||
void* dsc_data = force_malloc(dsc_s.length);
|
||
size_t dsc_length = dsc_s.length;
|
||
io_read(&dsc_s, dsc_data, dsc_length);
|
||
|
||
dsc* d = (dsc*)data;
|
||
bool ret = d->parse(dsc_data, dsc_length, d->type);
|
||
|
||
io_free(&dsc_s);
|
||
free(dsc_data);
|
||
return ret;
|
||
}
|
||
|
||
dsc_replace::dsc_replace(dsc_type src_type, dsc_type dst_type,
|
||
bool dst_has_perf_id) : src_type(DSC_FT), dst_type(DSC_FT), replace_data() {
|
||
|
||
bpm = 120;
|
||
time_signature = 3;
|
||
target_flying_time = -1000;
|
||
|
||
bar_time_set_func_id = -1;
|
||
target_flying_time_func_id = -1;
|
||
this->dst_has_perf_id = dst_has_perf_id;
|
||
|
||
if (src_type < DSC_AC101 || src_type > DSC_VRFL
|
||
|| dst_type < DSC_AC101 || dst_type > DSC_VRFL)
|
||
return;
|
||
|
||
this->src_type = src_type;
|
||
this->dst_type = dst_type;
|
||
this->replace_data = 0;
|
||
|
||
int32_t src_func_count = dsc_type_get_dsc_func_count(src_type);
|
||
int32_t dst_func_count = dsc_type_get_dsc_func_count(dst_type);
|
||
dsc_get_func_name src_get_func_name = dsc_type_get_dsc_get_func_name(src_type);
|
||
dsc_get_func_name dst_get_func_name = dsc_type_get_dsc_get_func_name(dst_type);
|
||
dsc_get_func_length dst_get_func_length = dsc_type_get_dsc_get_func_length(dst_type, dst_has_perf_id);
|
||
dsc_replace_data* replace_data = force_malloc_s(dsc_replace_data, src_func_count);
|
||
this->replace_data = replace_data;
|
||
|
||
for (int32_t i = 0; i < src_func_count; i++) {
|
||
replace_data->name = 0;
|
||
replace_data->func_id = -1;
|
||
replace_data->length = 0;
|
||
replace_data->func = 0;
|
||
const char* src_func_name = src_get_func_name(i);
|
||
if (src_func_name && src_func_name[0]) {
|
||
uint64_t src_func_name_hash = hash_utf8_fnv1a64m(src_func_name);
|
||
for (int32_t j = 0; j < dst_func_count; j++)
|
||
if (src_func_name_hash == hash_utf8_fnv1a64m(dst_get_func_name(j))) {
|
||
replace_data->name = src_func_name;
|
||
replace_data->func_id = j;
|
||
replace_data->length = dst_get_func_length(j);
|
||
break;
|
||
}
|
||
}
|
||
replace_data++;
|
||
}
|
||
}
|
||
|
||
dsc_replace::~dsc_replace() {
|
||
|
||
}
|