|
Re: Декомпилятор скриптов Готики
Определено несколько ограничений, возможно, это не все.
1. Имена файлов скриптов, а так же и директории, где они лежат, в dat файлах отсутствуют, поэтому файлы будут нумероваться 0.d, 1.d и т.д. и располагаться в одной директории (номера файлов соответствуют порядку компиляции). 2. В именах переменных отсутствует деление на нижний и верхний регистры символов (например имя AI_Output после компиляции будет AI_OUTPUT), поэтому при декомпиляции имена переменных можно представить только в нижнем или верхнем регистрах. Это не относится к инициализации текстовых строк, там все ОК! 3. В dat файле после компиляции отсутствуют имена размерностей и индексов массивов, есть только числовые значения. Поэтому при декомпиляции можно сделать так: было - const int max_menu_item = 5; const int monster = 2; ... menu[max_menu_item]; menu[monster] = aaa;
станет - const int max_menu_item = 5; const int monster = 2; ... menu[5]; menu[2] = aaa;
Все эти ограничения на круговые процессы компиляция <-> декомпиляция влияния оказывать не будут, результат будет всегда один.
Хочу привести первый результат работы декомпилятора при обработке файла music.dat, можно сравнить эти файлы с оригиналами и высказать замечания.
Первый файл 0.d
const string MOTIF_DEATH = "J_DEATH"; const string MOTIF_RESURRECTION = "J_RESURRECT"; const string MOTIF_FOUNDITEM = "J_FOUNDITEM"; const string MOTIF_SOLVEDMISSION = "J_MISSOLVED"; const string MOTIF_FAILEDMISSION = "J_MISFAILED"; const string MOTIF_KILLEDENEMY = "J_KILLEDENEMY"; const string MOTIF_KILLEDBIGENEMY = "J_KILLEDBIGENEMY"; const string MOTIF_LEVEL_GAIN = "J_LEVELGAIN"; const string MOTIF_ATTITUDE_INCREASE = "J_INC_AT"; const string MOTIF_ATTITUDE_DECREASE = "J_DEC_AT"; const string MOTIF_TRAP_ACTIVATE = "J_TRAP_ACTIVATE"; const string MOTIF_STEAL_FAIL = "J_STEAL_FAIL"; const string MOTIF_REFRESH_MANA = "J_MANA_REFRESH"; const string MOTIF_REFRESH_HEALTH = "J_HEALTH_REFRESH"; const string MOTIF_REFRESH_PSI = "J_PSI_REFRESH"; const string MOTIF_HEALTHLOW = "J_HEALTH_LOW";
const int TRANSITION_TYPE_NONE = 1; const int TRANSITION_TYPE_GROOVE = 2; const int TRANSITION_TYPE_FILL = 3; const int TRANSITION_TYPE_BREAK = 4; const int TRANSITION_TYPE_INTRO = 5; const int TRANSITION_TYPE_END = 6; const int TRANSITION_TYPE_ENDANDINTRO = 7; const int TRANSITION_SUB_TYPE_IMMEDIATE = 1; const int TRANSITION_SUB_TYPE_BEAT = 2; const int TRANSITION_SUB_TYPE_MEASURE = 3;
class C_MUSICSYS_CFG { * * *var float volume; * * *var int bitresolution; * * *var int globalreverbenabled; * * *var int samplerate; * * *var int numchannels; * * *var int reverbbuffersize; };
class C_MUSICTHEME { * * *var string file; * * *var float vol; * * *var int loop; * * *var float reverbmix; * * *var float reverbtime; * * *var int transtype; * * *var int transsubtype; };
class C_MUSICJINGLE { * * *var string name; * * *var int loop; * * *var float vol; * * *var int transsubtype; };
prototype C_MUSICTHEME_DEF(C_MUSICTHEME) { * * *vol = 1; * * *loop = 1; * * *transtype = TRANSITION_TYPE_NONE; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; * * *reverbmix = -10; * * *reverbtime = 8500; };
prototype C_MUSICJINGLE_DEF(C_MUSICJINGLE) { * * *name = ""; * * *vol = 1; * * *loop = 0; * * *transsubtype = TRANSITION_SUB_TYPE_BEAT; };
Второй файл 1.d
instance MUSICSYSCONFIG(C_MUSICSYS_CFG) { * * *volume = 1; * * *bitresolution = 16; * * *globalreverbenabled = 1; * * *samplerate = 44100; * * *numchannels = 16; * * *reverbbuffersize = 262144; };
instance JINGLEFOUNDITEM(C_MUSICJINGLE_DEF) { * * *name = "E-Positive 2"; * * *transsubtype = TRANSITION_SUB_TYPE_BEAT; };
instance JINGLELEVELGAIN(C_MUSICJINGLE_DEF) { * * *name = "E-Positive 1"; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance JINGLEKILLEDFOE(C_MUSICJINGLE_DEF) { * * *name = "E-Positive 2"; * * *transsubtype = TRANSITION_SUB_TYPE_BEAT; };
instance JINGLELEARNTALENT(C_MUSICJINGLE_DEF) { * * *name = "E-Positive 1"; * * *transsubtype = TRANSITION_SUB_TYPE_BEAT; };
instance SYS_MENU(C_MUSICTHEME_DEF) { * * *file = "menu.sgt"; * * *transtype = TRANSITION_TYPE_NONE; * * *transsubtype = TRANSITION_SUB_TYPE_BEAT; * * *reverbmix = -10; * * *reverbtime = 8500; };
instance SYS_LOADING(C_MUSICTHEME_DEF) { * * *file = "menu.sgt"; * * *transtype = TRANSITION_TYPE_NONE; * * *transsubtype = TRANSITION_SUB_TYPE_BEAT; * * *reverbmix = -12; * * *reverbtime = 8500; };
instance DEF_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "ow_day_std.sgt"; };
instance DEF_DAY_THR(C_MUSICTHEME_DEF) { * * *file = "cam_day_thr.sgt"; };
instance DEF_DAY_FGT(C_MUSICTHEME_DEF) { * * *file = "cam_day_fgt.sgt"; };
instance DEF_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "cam_ngt_std.sgt"; };
instance DEF_NGT_THR(C_MUSICTHEME_DEF) { * * *file = "cam_ngt_std.sgt"; };
instance DEF_NGT_FGT(C_MUSICTHEME_DEF) { * * *file = "cam_day_fgt.sgt"; };
instance OC_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "oc_day_std.sgt"; * * *transtype = TRANSITION_TYPE_BREAK; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance OC_DAY_THR(C_MUSICTHEME_DEF) { * * *file = "oc_day_std.sgt"; * * *transtype = TRANSITION_TYPE_BREAK; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance OC_DAY_FGT(C_MUSICTHEME_DEF) { * * *file = "oc_day_fgt.sgt"; * * *transtype = TRANSITION_TYPE_FILL; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance OC_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "cam_ngt_std.sgt"; };
instance OC_NGT_THR(C_MUSICTHEME_DEF) { * * *file = "cam_ngt_thr.sgt"; };
instance OC_NGT_FGT(C_MUSICTHEME_DEF) { * * *file = "oc_day_fgt.sgt"; * * *transtype = TRANSITION_TYPE_FILL; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance ARE_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "foc_day_std.sgt"; };
instance ARE_DAY_THR(C_MUSICTHEME_DEF) { * * *file = "foc_day_std.sgt"; };
instance ARE_DAY_FGT(C_MUSICTHEME_DEF) { * * *file = "oc_day_fgt.sgt"; * * *transtype = TRANSITION_TYPE_FILL; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance IE_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "oc_day_std.sgt"; };
instance IE_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "cam_ngt_std.sgt"; };
instance IE_DAY_THR(C_MUSICTHEME_DEF) { * * *file = "oc_day_std.sgt"; };
instance IE_DAY_FGT(C_MUSICTHEME_DEF) { * * *file = "oc_day_fgt.sgt"; };
instance NCO_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "cam_day_std.sgt"; * * *transtype = TRANSITION_TYPE_BREAK; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance NCO_DAY_THR(C_MUSICTHEME_DEF) { * * *file = "cam_day_thr.sgt"; * * *transtype = TRANSITION_TYPE_BREAK; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance NCO_DAY_FGT(C_MUSICTHEME_DEF) { * * *file = "cam_day_fgt.sgt"; * * *transtype = TRANSITION_TYPE_FILL; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance NCO_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "cam_ngt_std.sgt"; };
instance NCO_NGT_THR(C_MUSICTHEME_DEF) { * * *file = "cam_ngt_std.sgt"; };
instance NCO_NGT_FGT(C_MUSICTHEME_DEF) { * * *file = "cam_ngt_std.sgt"; };
instance NCI_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "nci_day_std.sgt"; * * *transtype = TRANSITION_TYPE_BREAK; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance NCI_DAY_THR(C_MUSICTHEME_DEF) { * * *file = "nci_day_std.sgt"; * * *transtype = TRANSITION_TYPE_BREAK; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance NCI_DAY_FGT(C_MUSICTHEME_DEF) { * * *file = "nci_day_fgt.sgt"; * * *transtype = TRANSITION_TYPE_FILL; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance NCI_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "nci_day_std.sgt"; };
instance NCI_NGT_THR(C_MUSICTHEME_DEF) { * * *file = "nci_day_std.sgt"; };
instance NCI_NGT_FGT(C_MUSICTHEME_DEF) { * * *file = "nci_day_fgt.sgt"; * * *transtype = TRANSITION_TYPE_FILL; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance PSI_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "psi_day_std.sgt"; * * *transtype = TRANSITION_TYPE_BREAK; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance PSI_DAY_THR(C_MUSICTHEME_DEF) { * * *file = "psi_day_thr.sgt"; * * *transtype = TRANSITION_TYPE_BREAK; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance PSI_DAY_FGT(C_MUSICTHEME_DEF) { * * *file = "psi_day_fgt.sgt"; * * *transtype = TRANSITION_TYPE_FILL; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance PSI_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "psi_ngt_std.sgt"; };
instance PSI_NGT_THR(C_MUSICTHEME_DEF) { * * *file = "psi_ngt_std.sgt"; };
instance PSI_NGT_FGT(C_MUSICTHEME_DEF) { * * *file = "psi_day_fgt.sgt"; };
instance OW_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "ow_day_std.sgt"; };
instance OW_DAY_THR(C_MUSICTHEME_DEF) { * * *file = "ow_day_std.sgt"; };
instance OW_DAY_FGT(C_MUSICTHEME_DEF) { * * *file = "ow_day_std.sgt"; };
instance OW_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "ow_day_std.sgt"; };
instance OW_NGT_THR(C_MUSICTHEME_DEF) { * * *file = "ow_day_std.sgt"; };
instance OW_NGT_FGT(C_MUSICTHEME_DEF) { * * *file = "ow_day_std.sgt"; };
instance STA_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "ban_day_std.sgt"; };
instance BEA_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "ow_day_std.sgt"; };
instance BEA_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "ow_day_std.sgt"; };
instance BAN_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "ban_day_std.sgt"; };
instance CAM_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "cam_day_std.sgt"; };
instance CAS_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "cam_day_thr.sgt"; };
instance CAS_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "cam_ngt_std.sgt"; };
instance DT_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "cam_day_thr.sgt"; };
instance DT_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "cam_ngt_std.sgt"; };
instance FC_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "ban_day_std.sgt"; };
instance FC_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "ban_day_std.sgt"; };
instance FOC_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "FOC_day_std.sgt"; };
instance FOC_DAY_THR(C_MUSICTHEME_DEF) { * * *file = "FOC_day_std.sgt"; };
instance FOC_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "FOC_day_std.sgt"; };
instance FOC_NGT_THR(C_MUSICTHEME_DEF) { * * *file = "FOC_day_std.sgt"; };
instance OGR_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "foc_day_std.sgt"; };
instance OGR_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "foc_day_std.sgt"; };
instance OL1_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "ban_day_std.sgt"; };
instance OL1_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "cam_ngt_std.sgt"; };
instance OME_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "cam_day_thr.sgt"; };
instance OME_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "cam_ngt_std.sgt"; };
instance ORC_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "orc_day_std.sgt"; * * *transtype = TRANSITION_TYPE_BREAK; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance ORC_DAY_THR(C_MUSICTHEME_DEF) { * * *file = "orc_day_std.sgt"; * * *transtype = TRANSITION_TYPE_BREAK; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance ORC_DAY_FGT(C_MUSICTHEME_DEF) { * * *file = "oc_day_fgt.sgt"; * * *transtype = TRANSITION_TYPE_FILL; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance ORC_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "orc_day_std.sgt"; };
instance ORC_NGT_THR(C_MUSICTHEME_DEF) { * * *file = "orc_day_std.sgt"; };
instance ORC_NGT_FGT(C_MUSICTHEME_DEF) { * * *file = "oc_day_fgt.sgt"; };
instance OR_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "ban_day_std.sgt"; };
instance OR_DAY_THR(C_MUSICTHEME_DEF) { * * *file = "ban_day_std.sgt"; };
instance OR_DAY_FGT(C_MUSICTHEME_DEF) { * * *file = "oc_day_fgt.sgt"; };
instance OR_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "cam_ngt_std.sgt"; };
instance OR_NGT_THR(C_MUSICTHEME_DEF) { * * *file = "cam_ngt_std.sgt"; };
instance OR_NGT_FGT(C_MUSICTHEME_DEF) { * * *file = "cam_ngt_std.sgt"; };
instance PDN_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "ow_day_std.sgt"; };
instance PDN_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "cam_ngt_std.sgt"; };
instance PIR_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "ban_day_std.sgt"; };
instance STO_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "foc_day_std.sgt"; };
instance STO_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "foc_day_std.sgt"; };
instance TA_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "ow_day_std.sgt"; };
instance TA_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "cam_ngt_std.sgt"; };
instance TD_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "ow_day_std.sgt"; };
instance TD_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "cam_ngt_std.sgt"; };
instance TRU_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "ow_day_std.sgt"; };
instance TRU_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "cam_ngt_std.sgt"; };
instance TPL_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "ogy_day_std.sgt"; };
instance TPL_DAY_THR(C_MUSICTHEME_DEF) { * * *file = "ogy_day_std.sgt"; };
instance TPL_DAY_FGT(C_MUSICTHEME_DEF) { * * *file = "ogy_day_fgt.sgt"; };
instance TPL_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "ogy_day_std.sgt"; };
instance KAT_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "ogy_day_std.sgt"; };
instance KAT_DAY_THR(C_MUSICTHEME_DEF) { * * *file = "ogy_day_std.sgt"; };
instance KAT_DAY_FGT(C_MUSICTHEME_DEF) { * * *file = "ogy_day_fgt.sgt"; };
instance KAT_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "ogy_day_std.sgt"; };
instance SPL_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "ogy_day_std.sgt"; };
instance SPL_DAY_THR(C_MUSICTHEME_DEF) { * * *file = "ogy_day_std.sgt"; };
instance SPL_DAY_FGT(C_MUSICTHEME_DEF) { * * *file = "ogy_day_fgt.sgt"; };
instance SPL_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "ogy_day_std.sgt"; };
instance FRM_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "olm_day_std.sgt"; * * *transtype = TRANSITION_TYPE_BREAK; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance FRM_DAY_THR(C_MUSICTHEME_DEF) { * * *file = "olm_day_thr.sgt"; * * *transtype = TRANSITION_TYPE_BREAK; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance FRM_DAY_FGT(C_MUSICTHEME_DEF) { * * *file = "olm_day_fgt.sgt"; * * *transtype = TRANSITION_TYPE_FILL; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance FRM_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "olm_day_std.sgt"; * * *transtype = TRANSITION_TYPE_BREAK; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance OLM_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "olm_day_std.sgt"; * * *transtype = TRANSITION_TYPE_BREAK; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance OLM_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "olm_day_std.sgt"; * * *transtype = TRANSITION_TYPE_BREAK; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance OLM_DAY_THR(C_MUSICTHEME_DEF) { * * *file = "olm_day_thr.sgt"; * * *transtype = TRANSITION_TYPE_BREAK; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance OLM_DAY_FGT(C_MUSICTHEME_DEF) { * * *file = "olm_day_fgt.sgt"; * * *transtype = TRANSITION_TYPE_FILL; * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE; };
instance OGY_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "ogy_day_std.sgt"; };
instance OGY_DAY_THR(C_MUSICTHEME_DEF) { * * *file = "ogy_day_std.sgt"; };
instance OGY_DAY_FGT(C_MUSICTHEME_DEF) { * * *file = "ogy_day_fgt.sgt"; };
instance OGY_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "ogy_day_std.sgt"; };
instance DIC_DAY_STD(C_MUSICTHEME_DEF) { * * *file = "dic_day_std.sgt"; };
instance DIC_DAY_THR(C_MUSICTHEME_DEF) { * * *file = "dic_day_std.sgt"; };
instance DIC_DAY_FGT(C_MUSICTHEME_DEF) { * * *file = "dic_day_std.sgt"; };
instance DIC_NGT_STD(C_MUSICTHEME_DEF) { * * *file = "dic_day_std.sgt"; };
instance DIC_NGT_THR(C_MUSICTHEME_DEF) { * * *file = "dic_day_std.sgt"; };
instance DIC_NGT_FGT(C_MUSICTHEME_DEF) { * * *file = "dic_day_std.sgt"; };
Приму все дальнейшие пожелания. *;)
|