Re: Декомпилятор скриптов Готики
2Vam:<br><br>Извини, но запамятовал и не сообщил сразу, что можно покопаться и в исходниках.<br><br>Залезь сюда, на этой системе делались все Готики и МОД-ы.<br>Сорри, знал давно, но как-то в ум не пришло, посоветовать сюда заглянуть.<br><br>http://nsis.sourceforge.net/<br>
|
Re: Декомпилятор скриптов Готики
2Pa:<br>
Цитата:
|
Re: Декомпилятор скриптов Готики
2Mitrich:<br>
Цитата:
|
Re: Декомпилятор скриптов Готики
2Vam:
Цитата:
|
Re: Декомпилятор скриптов Готики
Если я правильно понимаю, основная проблема при скриптовании в соблюдении правильной структуры скрипта при задании некоторых условий и связей. И именно эту проблему утилита и должна помочь решить, а функции, не вошедшие в условную библиотеку, можно позволить забивать вручную тем одаренным созданиям, которые знают их название. :)
|
Re: Декомпилятор скриптов Готики
2Mitrich:<br>В скриптах Готики вообще как-бы отсутствует структура, есть базовые (библиотечные) функции (про них я и говорил), а есть функции, созданные теми, кто пишет скрипт. Выполняются же функции совсем не в том порядке, в каком они представлены в скриптах. Базовые функции с их параметрами надо знать, на их основе создается все остальное.<br>Есть предложение в отдельной теме, например: [glow=red,2,300]Уроки скриптологии[/glow] или что-то в этом роде, рассматривать и обсуждать базовые функции. Это можно сделать таким образом, я выкладываю тройку функций с параметрами, и каждый, кто в этом что-нибудь понимает, пытается описать действие функции и все ее параметры, на основе этого я делаю описание функции и переходим к следующей тройке. Это, конечно, займет много времени, а какой есть другой выход? Дело-то нужное. Ну, как? *;) :D
|
Re: Декомпилятор скриптов Готики
2Vam:<br>
Цитата:
|
Re: Декомпилятор скриптов Готики
2Killer-XXX:<br>
Цитата:
|
Re: Декомпилятор скриптов Готики
2Vam: <br>
Цитата:
Цитата:
|
Re: Декомпилятор скриптов Готики
2Mitrich:<br>
Цитата:
Цитата:
|
Re: Декомпилятор скриптов Готики
Цитата:
|
Re: Декомпилятор скриптов Готики
2Mitrich:<br>
Цитата:
|
Re: Декомпилятор скриптов Готики
2Vam:
Цитата:
|
Re: Декомпилятор скриптов Готики
2Mitrich:<br>Что-то не наблюдается энтузиазма в деле изучения скриптов? Может это никому и не надо. :(<br>
|
Re: Декомпилятор скриптов Готики
2Vam:<br>
Цитата:
Цитата:
|
Re: Декомпилятор скриптов Готики
2Vam:
Цитата:
|
Re: Декомпилятор скриптов Готики
2Pa: <br>
Цитата:
Цитата:
|
Re: Декомпилятор скриптов Готики
2TycoooN:<br>
Цитата:
Цитата:
|
Re: Декомпилятор скриптов Готики
2Pa:<br>Благодарю за честь, но я в этом чайник :)<br>Так что, предлагаю... мммм.... Ну кто? Люди, ну нужен ведущий рубрики... Vam, может после написания компилятора, берешься? Будем дружно помогать...
|
Re: Декомпилятор скриптов Готики
2TycoooN:<br>
Цитата:
|
Re: Декомпилятор скриптов Готики
Достигнут определенный успех в деле компиляции. Сегодня, моей программой были откомпилированы все файлы скриптов Диккурика. Осталось разобрать и написать функцию записи результата компиляции в dat файл (попросту говоря - линковщик). :D
|
Re: Декомпилятор скриптов Готики
2Vam: <br>Ну так это сам компилятор, но еще же надо будет написать обратную функцию?
|
Re: Декомпилятор скриптов Готики
2Killer-XXX:<br>
Цитата:
|
Re: Декомпилятор скриптов Готики
Формат dat файлов полностью изучен. Осталось определить перечень ограничений, с которыми можно сгенерить скрипты из dat файла, и переходить к написанию декомпилятора. :D
|
Re: Декомпилятор скриптов Готики
Определено несколько ограничений, возможно, это не все.<br><br>1. Имена файлов скриптов, а так же и директории, где они лежат, в dat файлах отсутствуют, поэтому файлы будут нумероваться 0.d, 1.d и т.д. и располагаться в одной директории (номера файлов соответствуют порядку компиляции).<br>2. В именах переменных отсутствует деление на нижний и верхний регистры символов (например имя AI_Output после компиляции будет AI_OUTPUT), поэтому при декомпиляции имена переменных можно представить только в нижнем или верхнем регистрах. Это не относится к инициализации текстовых строк, там все ОК!<br>3. В dat файле после компиляции отсутствуют имена размерностей и индексов массивов, есть только числовые значения. Поэтому при декомпиляции можно сделать так:<br>было - <br>const int max_menu_item = 5;<br>const int monster = 2;<br>...<br>menu[max_menu_item]; menu[monster] = aaa;<br><br>станет - <br>const int max_menu_item = 5;<br>const int monster = 2;<br>...<br>menu[5]; menu[2] = aaa;<br><br>Все эти ограничения на круговые процессы компиляция <-> декомпиляция влияния оказывать не будут, результат будет всегда один.<br><br>Хочу привести первый результат работы декомпилятора при обработке файла music.dat, можно сравнить эти файлы с оригиналами и высказать замечания.<br><br>Первый файл 0.d<br><br>const string MOTIF_DEATH = "J_DEATH";<br>const string MOTIF_RESURRECTION = "J_RESURRECT";<br>const string MOTIF_FOUNDITEM = "J_FOUNDITEM";<br>const string MOTIF_SOLVEDMISSION = "J_MISSOLVED";<br>const string MOTIF_FAILEDMISSION = "J_MISFAILED";<br>const string MOTIF_KILLEDENEMY = "J_KILLEDENEMY";<br>const string MOTIF_KILLEDBIGENEMY = "J_KILLEDBIGENEMY";<br>const string MOTIF_LEVEL_GAIN = "J_LEVELGAIN";<br>const string MOTIF_ATTITUDE_INCREASE = "J_INC_AT";<br>const string MOTIF_ATTITUDE_DECREASE = "J_DEC_AT";<br>const string MOTIF_TRAP_ACTIVATE = "J_TRAP_ACTIVATE";<br>const string MOTIF_STEAL_FAIL = "J_STEAL_FAIL";<br>const string MOTIF_REFRESH_MANA = "J_MANA_REFRESH";<br>const string MOTIF_REFRESH_HEALTH = "J_HEALTH_REFRESH";<br>const string MOTIF_REFRESH_PSI = "J_PSI_REFRESH";<br>const string MOTIF_HEALTHLOW = "J_HEALTH_LOW";<br><br>const int TRANSITION_TYPE_NONE = 1;<br>const int TRANSITION_TYPE_GROOVE = 2;<br>const int TRANSITION_TYPE_FILL = 3;<br>const int TRANSITION_TYPE_BREAK = 4;<br>const int TRANSITION_TYPE_INTRO = 5;<br>const int TRANSITION_TYPE_END = 6;<br>const int TRANSITION_TYPE_ENDANDINTRO = 7;<br>const int TRANSITION_SUB_TYPE_IMMEDIATE = 1;<br>const int TRANSITION_SUB_TYPE_BEAT = 2;<br>const int TRANSITION_SUB_TYPE_MEASURE = 3;<br><br>class C_MUSICSYS_CFG<br>{<br> * * *var float volume;<br> * * *var int bitresolution;<br> * * *var int globalreverbenabled;<br> * * *var int samplerate;<br> * * *var int numchannels;<br> * * *var int reverbbuffersize;<br>};<br><br>class C_MUSICTHEME<br>{<br> * * *var string file;<br> * * *var float vol;<br> * * *var int loop;<br> * * *var float reverbmix;<br> * * *var float reverbtime;<br> * * *var int transtype;<br> * * *var int transsubtype;<br>};<br><br>class C_MUSICJINGLE<br>{<br> * * *var string name;<br> * * *var int loop;<br> * * *var float vol;<br> * * *var int transsubtype;<br>};<br><br>prototype C_MUSICTHEME_DEF(C_MUSICTHEME)<br>{<br> * * *vol = 1;<br> * * *loop = 1;<br> * * *transtype = TRANSITION_TYPE_NONE;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br> * * *reverbmix = -10;<br> * * *reverbtime = 8500;<br>};<br><br>prototype C_MUSICJINGLE_DEF(C_MUSICJINGLE)<br>{<br> * * *name = "";<br> * * *vol = 1;<br> * * *loop = 0;<br> * * *transsubtype = TRANSITION_SUB_TYPE_BEAT;<br>};<br><br>Второй файл 1.d<br><br>instance MUSICSYSCONFIG(C_MUSICSYS_CFG)<br>{<br> * * *volume = 1;<br> * * *bitresolution = 16;<br> * * *globalreverbenabled = 1;<br> * * *samplerate = 44100;<br> * * *numchannels = 16;<br> * * *reverbbuffersize = 262144;<br>};<br><br>instance JINGLEFOUNDITEM(C_MUSICJINGLE_DEF)<br>{<br> * * *name = "E-Positive 2";<br> * * *transsubtype = TRANSITION_SUB_TYPE_BEAT;<br>};<br><br>instance JINGLELEVELGAIN(C_MUSICJINGLE_DEF)<br>{<br> * * *name = "E-Positive 1";<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance JINGLEKILLEDFOE(C_MUSICJINGLE_DEF)<br>{<br> * * *name = "E-Positive 2";<br> * * *transsubtype = TRANSITION_SUB_TYPE_BEAT;<br>};<br><br>instance JINGLELEARNTALENT(C_MUSICJINGLE_DEF)<br>{<br> * * *name = "E-Positive 1";<br> * * *transsubtype = TRANSITION_SUB_TYPE_BEAT;<br>};<br><br>instance SYS_MENU(C_MUSICTHEME_DEF)<br>{<br> * * *file = "menu.sgt";<br> * * *transtype = TRANSITION_TYPE_NONE;<br> * * *transsubtype = TRANSITION_SUB_TYPE_BEAT;<br> * * *reverbmix = -10;<br> * * *reverbtime = 8500;<br>};<br><br>instance SYS_LOADING(C_MUSICTHEME_DEF)<br>{<br> * * *file = "menu.sgt";<br> * * *transtype = TRANSITION_TYPE_NONE;<br> * * *transsubtype = TRANSITION_SUB_TYPE_BEAT;<br> * * *reverbmix = -12;<br> * * *reverbtime = 8500;<br>};<br><br>instance DEF_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ow_day_std.sgt";<br>};<br><br>instan ce DEF_DAY_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_day_thr.sgt";<br>};<br><br>insta nce DEF_DAY_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_day_fgt.sgt";<br>};<br><br>insta nce DEF_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_ngt_std.sgt";<br>};<br><br>insta nce DEF_NGT_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_ngt_std.sgt";<br>};<br><br>insta nce DEF_NGT_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_day_fgt.sgt";<br>};<br><br>insta nce OC_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "oc_day_std.sgt";<br> * * *transtype = TRANSITION_TYPE_BREAK;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance OC_DAY_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "oc_day_std.sgt";<br> * * *transtype = TRANSITION_TYPE_BREAK;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance OC_DAY_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "oc_day_fgt.sgt";<br> * * *transtype = TRANSITION_TYPE_FILL;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance OC_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_ngt_std.sgt";<br>};<br><br>insta nce OC_NGT_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_ngt_thr.sgt";<br>};<br><br>insta nce OC_NGT_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "oc_day_fgt.sgt";<br> * * *transtype = TRANSITION_TYPE_FILL;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance ARE_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "foc_day_std.sgt";<br>};<br><br>insta nce ARE_DAY_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "foc_day_std.sgt";<br>};<br><br>insta nce ARE_DAY_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "oc_day_fgt.sgt";<br> * * *transtype = TRANSITION_TYPE_FILL;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance IE_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "oc_day_std.sgt";<br>};<br><br>instan ce IE_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_ngt_std.sgt";<br>};<br><br>insta nce IE_DAY_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "oc_day_std.sgt";<br>};<br><br>instan ce IE_DAY_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "oc_day_fgt.sgt";<br>};<br><br>instan ce NCO_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_day_std.sgt";<br> * * *transtype = TRANSITION_TYPE_BREAK;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance NCO_DAY_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_day_thr.sgt";<br> * * *transtype = TRANSITION_TYPE_BREAK;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance NCO_DAY_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_day_fgt.sgt";<br> * * *transtype = TRANSITION_TYPE_FILL;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance NCO_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_ngt_std.sgt";<br>};<br><br>insta nce NCO_NGT_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_ngt_std.sgt";<br>};<br><br>insta nce NCO_NGT_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_ngt_std.sgt";<br>};<br><br>insta nce NCI_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "nci_day_std.sgt";<br> * * *transtype = TRANSITION_TYPE_BREAK;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance NCI_DAY_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "nci_day_std.sgt";<br> * * *transtype = TRANSITION_TYPE_BREAK;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance NCI_DAY_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "nci_day_fgt.sgt";<br> * * *transtype = TRANSITION_TYPE_FILL;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance NCI_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "nci_day_std.sgt";<br>};<br><br>insta nce NCI_NGT_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "nci_day_std.sgt";<br>};<br><br>insta nce NCI_NGT_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "nci_day_fgt.sgt";<br> * * *transtype = TRANSITION_TYPE_FILL;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance PSI_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "psi_day_std.sgt";<br> * * *transtype = TRANSITION_TYPE_BREAK;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance PSI_DAY_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "psi_day_thr.sgt";<br> * * *transtype = TRANSITION_TYPE_BREAK;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance PSI_DAY_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "psi_day_fgt.sgt";<br> * * *transtype = TRANSITION_TYPE_FILL;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance PSI_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "psi_ngt_std.sgt";<br>};<br><br>insta nce PSI_NGT_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "psi_ngt_std.sgt";<br>};<br><br>insta nce PSI_NGT_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "psi_day_fgt.sgt";<br>};<br><br>insta nce OW_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ow_day_std.sgt";<br>};<br><br>instan ce OW_DAY_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ow_day_std.sgt";<br>};<br><br>instan ce OW_DAY_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ow_day_std.sgt";<br>};<br><br>instan ce OW_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ow_day_std.sgt";<br>};<br><br>instan ce OW_NGT_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ow_day_std.sgt";<br>};<br><br>instan ce OW_NGT_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ow_day_std.sgt";<br>};<br><br>instan ce STA_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ban_day_std.sgt";<br>};<br><br>insta nce BEA_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ow_day_std.sgt";<br>};<br><br>instan ce BEA_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ow_day_std.sgt";<br>};<br><br>instan ce BAN_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ban_day_std.sgt";<br>};<br><br>insta nce CAM_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_day_std.sgt";<br>};<br><br>insta nce CAS_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_day_thr.sgt";<br>};<br><br>insta nce CAS_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_ngt_std.sgt";<br>};<br><br>insta nce DT_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_day_thr.sgt";<br>};<br><br>insta nce DT_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_ngt_std.sgt";<br>};<br><br>insta nce FC_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ban_day_std.sgt";<br>};<br><br>insta nce FC_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ban_day_std.sgt";<br>};<br><br>insta nce FOC_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "FOC_day_std.sgt";<br>};<br><br>insta nce FOC_DAY_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "FOC_day_std.sgt";<br>};<br><br>insta nce FOC_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "FOC_day_std.sgt";<br>};<br><br>insta nce FOC_NGT_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "FOC_day_std.sgt";<br>};<br><br>insta nce OGR_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "foc_day_std.sgt";<br>};<br><br>insta nce OGR_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "foc_day_std.sgt";<br>};<br><br>insta nce OL1_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ban_day_std.sgt";<br>};<br><br>insta nce OL1_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_ngt_std.sgt";<br>};<br><br>insta nce OME_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_day_thr.sgt";<br>};<br><br>insta nce OME_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_ngt_std.sgt";<br>};<br><br>insta nce ORC_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "orc_day_std.sgt";<br> * * *transtype = TRANSITION_TYPE_BREAK;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance ORC_DAY_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "orc_day_std.sgt";<br> * * *transtype = TRANSITION_TYPE_BREAK;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance ORC_DAY_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "oc_day_fgt.sgt";<br> * * *transtype = TRANSITION_TYPE_FILL;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance ORC_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "orc_day_std.sgt";<br>};<br><br>insta nce ORC_NGT_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "orc_day_std.sgt";<br>};<br><br>insta nce ORC_NGT_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "oc_day_fgt.sgt";<br>};<br><br>instan ce OR_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ban_day_std.sgt";<br>};<br><br>insta nce OR_DAY_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ban_day_std.sgt";<br>};<br><br>insta nce OR_DAY_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "oc_day_fgt.sgt";<br>};<br><br>instan ce OR_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_ngt_std.sgt";<br>};<br><br>insta nce OR_NGT_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_ngt_std.sgt";<br>};<br><br>insta nce OR_NGT_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_ngt_std.sgt";<br>};<br><br>insta nce PDN_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ow_day_std.sgt";<br>};<br><br>instan ce PDN_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_ngt_std.sgt";<br>};<br><br>insta nce PIR_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ban_day_std.sgt";<br>};<br><br>insta nce STO_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "foc_day_std.sgt";<br>};<br><br>insta nce STO_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "foc_day_std.sgt";<br>};<br><br>insta nce TA_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ow_day_std.sgt";<br>};<br><br>instan ce TA_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_ngt_std.sgt";<br>};<br><br>insta nce TD_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ow_day_std.sgt";<br>};<br><br>instan ce TD_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_ngt_std.sgt";<br>};<br><br>insta nce TRU_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ow_day_std.sgt";<br>};<br><br>instan ce TRU_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "cam_ngt_std.sgt";<br>};<br><br>insta nce TPL_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ogy_day_std.sgt";<br>};<br><br>insta nce TPL_DAY_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ogy_day_std.sgt";<br>};<br><br>insta nce TPL_DAY_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ogy_day_fgt.sgt";<br>};<br><br>insta nce TPL_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ogy_day_std.sgt";<br>};<br><br>insta nce KAT_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ogy_day_std.sgt";<br>};<br><br>insta nce KAT_DAY_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ogy_day_std.sgt";<br>};<br><br>insta nce KAT_DAY_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ogy_day_fgt.sgt";<br>};<br><br>insta nce KAT_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ogy_day_std.sgt";<br>};<br><br>insta nce SPL_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ogy_day_std.sgt";<br>};<br><br>insta nce SPL_DAY_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ogy_day_std.sgt";<br>};<br><br>insta nce SPL_DAY_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ogy_day_fgt.sgt";<br>};<br><br>insta nce SPL_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ogy_day_std.sgt";<br>};<br><br>insta nce FRM_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "olm_day_std.sgt";<br> * * *transtype = TRANSITION_TYPE_BREAK;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance FRM_DAY_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "olm_day_thr.sgt";<br> * * *transtype = TRANSITION_TYPE_BREAK;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance FRM_DAY_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "olm_day_fgt.sgt";<br> * * *transtype = TRANSITION_TYPE_FILL;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance FRM_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "olm_day_std.sgt";<br> * * *transtype = TRANSITION_TYPE_BREAK;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance OLM_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "olm_day_std.sgt";<br> * * *transtype = TRANSITION_TYPE_BREAK;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance OLM_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "olm_day_std.sgt";<br> * * *transtype = TRANSITION_TYPE_BREAK;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance OLM_DAY_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "olm_day_thr.sgt";<br> * * *transtype = TRANSITION_TYPE_BREAK;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance OLM_DAY_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "olm_day_fgt.sgt";<br> * * *transtype = TRANSITION_TYPE_FILL;<br> * * *transsubtype = TRANSITION_SUB_TYPE_MEASURE;<br>};<br><br>instance OGY_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ogy_day_std.sgt";<br>};<br><br>insta nce OGY_DAY_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ogy_day_std.sgt";<br>};<br><br>insta nce OGY_DAY_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ogy_day_fgt.sgt";<br>};<br><br>insta nce OGY_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "ogy_day_std.sgt";<br>};<br><br>insta nce DIC_DAY_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "dic_day_std.sgt";<br>};<br><br>insta nce DIC_DAY_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "dic_day_std.sgt";<br>};<br><br>insta nce DIC_DAY_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "dic_day_std.sgt";<br>};<br><br>insta nce DIC_NGT_STD(C_MUSICTHEME_DEF)<br>{<br> * * *file = "dic_day_std.sgt";<br>};<br><br>insta nce DIC_NGT_THR(C_MUSICTHEME_DEF)<br>{<br> * * *file = "dic_day_std.sgt";<br>};<br><br>insta nce DIC_NGT_FGT(C_MUSICTHEME_DEF)<br>{<br> * * *file = "dic_day_std.sgt";<br>};<br><br>Приму все дальнейшие пожелания. *;)<br>
|
Re: Декомпилятор скриптов Готики
2TycoooN:<br>Ответ по декомпилятору:<br>Все основные выражения языка декомпилировать уже могу. Идет отладка некоторых моментов (вложенность блоков if - else, использование функций в качестве аргументов других функций и т.д), все это реализуемо.<br><br>Выявил еще одно ограничение (хотя ограничением его назвать сложно, кто знает отличие С от С++ в области локальных переменных - тот поймет): Локальные переменные внутри функции будут объявляться сразу при входе в функцию, а не по мере их использования (как сделано в скриптах).<br><br>Я думаю, что недели через две будет готов "черновой" рабочий вариант декомпилятора. Затем необходимо будет сделать графическую оболочку и отдать на тестирование. *:D
|
Re: Декомпилятор скриптов Готики
2Vam:
Цитата:
|
Re: Декомпилятор скриптов Готики
2Vam: <br>А сколько он (примерно) будет весить?
|
Re: Декомпилятор скриптов Готики
2TycoooN:<br>
Цитата:
|
Re: Декомпилятор скриптов Готики
2Vam: <br>Кстати у тебя нету какой нибудь Бета версии самого компилятора? А то столкнулся с проблемой, Спэйсер глючит, люди говорят у них такое же было, только сносом системы вылечилось, вот я бы пока и пользовался твоим компилятором, он же оригинальный, просто выдранный?
|
Re: Декомпилятор скриптов Готики
2Killer-XXX:<br>
Цитата:
|
Re: Декомпилятор скриптов Готики
Ошибка в скриптах Диккурика (версия rus beta 0.60, возможно и в других версиях).<br><br>В файле B_AssignAmbientInfos.d в одноименной функции в строке 12 имеется<br>else if (amb_self.voice = 16), а должно быть else if (amb_self.voice == 16).<br>Внутри if выражения присвоение не разрешается!<br>
|
Re: Декомпилятор скриптов Готики
2Vam: <br>Ну и к чему эта ошибка приводит? Имхо она не очень важна, т.к. файл B_AssignAmbientInfos.d сам по себе не очень важен :)
|
Re: Декомпилятор скриптов Готики
2TycoooN:<br>
Цитата:
|
Re: Декомпилятор скриптов Готики
В принципе ядро компилятор-декомпилятор закончено. Проверил на скриптах и дат файлах Готики 1 и Диккурика.<br>Могу выложить консольный вариант на тестирование, а сам начну делать графическую оболочку. Наверняка найдутся замечания и пожелания. По оболочке тоже хотелось бы предложений, какие функции реализовать.<br><br>Для подготовки консольного варианта мне необходимо пару дней.<br>Как вы на это смотрите? ;)
|
Re: Декомпилятор скриптов Готики
2Vam: <br>Конечно хотим! :) Выкладывай.<br>По оболочке главное пожелание - это чтобы при ошибках компиляции писалось, в каком конкретно скрипте ошибка.
|
Re: Декомпилятор скриптов Готики
Декомпилятор выложен на DiccuricAg. Понадобилось гораздо меньше времени на подготовку консольки, чем ожидал. ;)
|
Re: Декомпилятор скриптов Готики
2Vam: <br>Мог бы по такому случаю и сайтик забацать :)<br>Скорость, с которой ты подготовил программу впечатляет, щас скачаю и попробую потестить :D :D :D
|
Re: Декомпилятор скриптов Готики
2Vam: <br>Ну что ж, я с успехом декомпилировал снежковский Готик.дат :)<br>Разумеется, пожеланий довольно много, так что ты сразу скажи, что реально сделать, а что нет :)<br>1. Нельзя ли называть файлы не числами, а хотя бы примерно как это сделано у разработчиков? Ведь вполне реально назвать файл диалогов с Кор Галомом DIA_GUR_1201_CORKALOM.<br>2. Было бы неплохо, если бы в скриптах диалогов шел сначала Instance (C_Info), потом его _Condition, потом _Info (т.е. как принято у разрабов)<br>3. При наличии ou.csl/ou.bin чтобы после строк AI_Output добавлялся комментарий с фразами.<br>4. Собираешься ли ты делать декомпилятор для Готики 2? Он ведь тоже нужен ::)
|
Re: Декомпилятор скриптов Готики
2TycoooN: <br>1. К сожалению, в дат файле нет никаких имен исходных файлов, есть только номера файлов в том порядке, в котором проходила компиляция. Мы, сравнивая исходники и декомпилированный текст, видим очевидные имена файлов. Но, если бы у нас не было исходников, исходные имена файлов просто точно не восстановить, можно только предполагать, а декомпилятор не такой умный, чтобы предполагать. Может у кого-нибудь, поработав с программой, возникнет осуществимая идея - рассмотрим.<br>2. Декомпилятор создает текст строго в той последовательности, в какой проходила компиляция, никакие перестановки он не делает, да и не может делать, иначе возникнут ошибки. Твой вопрос мне не понятен. Если при сравнении декомпилированного файла и исходника наблюдаются перестановки, то это ошибка, требующая устранения (я такого не встречал).<br>3. Это сделаю обязательно, даже до графической оболочки. Необходимо реализовать два варианта - создание ou.bin и занесение информации из ou.bin в декомпилированные скрипты.<br>4. Да, следующим этапом, скрипты и дат файлы обеих Готик одинаковы, за исключением некоторых встроенных функций и переменных. Закончив рассмотрение функций Готики 1 (в теме Уроки скриптологии), перейду к Готике 2, а затем и модифицирую программу.<br>
|
Текущее время: 04:10. Часовой пояс GMT +4. |
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
AGFC: Valley of Gothic © 2004-2022