Показать сообщение отдельно
Старый 31.10.2004, 10:43   #65
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию 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";
};

Приму все дальнейшие пожелания. *;)
Ответить с цитированием