Разработка и ромхакинг > Ромхакинг и программирование
DuneHackEditor с встроенным редактором регионов.
<< < (2/5) > >>
SeregaZ:
забей :)


--- Цитата ---Integer .i 8 bytes (using 64-bit compiler) -9223372036854775808 to +9223372036854775807
Long .l 4 bytes -2147483648 to +2147483647
--- Конец цитаты ---
и мне вместо .i надо даже не .l, а .w

--- Цитата ---Word .w 2 bytes -32768 to +32767
--- Конец цитаты ---
просто если у тебя переменная может содержать скажем два значения 1 и 0 - то глупо определять её как .i - она ж выходит будет занимать целых 8 байт :) "00 00 00 00 00 00 00 01".
Alexandr7:

--- Цитата: SeregaZ от 24 Июль 2017, 15:10:38 ---просто если у тебя переменная может содержать скажем два значения 1 и 0 - то глупо определять её как .i - она ж выходит будет занимать целых 8 байт  "00 00 00 00 00 00 00 01".
--- Конец цитаты ---
А это в курсе. Я никогда не использую для 0 и 1 переменную типа int
Alexandr7:
Очередной скриншот:
Alexandr7:
И так. Раз M3tro ™ ругается то пишу сюда. У меня возникла проблема с кодировками. Точнее при внесении изменений русский текст превращается в кучу непонятных символов. Так что скажите какая кодировка
Точно не ASCII и UTF8
SeregaZ:
я хз чо ты там жмешь... в моем случае:

--- Код: ---WriteStringN(#DialogFile, "HarkBegins:", #PB_Ascii)
--- Конец кода ---
Alexandr7:

--- Цитата: SeregaZ от 26 Июль 2017, 15:27:12 ---я хз чо ты там жмешь... в моем случае:
--- Конец цитаты ---
Я использую StreamWriter

Добавлено позже:
Я просил название кодировки asm файлов
Yoti:

--- Цитата: Alexandr7 от 25 Июль 2017, 16:22:04 ---Очередной скриншот
--- Конец цитаты ---
Часто компЕлируешь?
Alexandr7:

--- Цитата: Yoti от 26 Июль 2017, 17:15:53 ---Часто компЕлируешь?
--- Конец цитаты ---
На время разработки уже раз 200
Alexandr7:

--- Цитата: Yoti от 26 Июль 2017, 17:15:53 ---Часто компЕлируешь?
--- Конец цитаты ---
Спасибо за идею. Я думал оставить как есть. Но решил обновить так чтобы можно было запустить ром хак без его каждой перекомпиляции
Кстати буду рад услышать ваши идеи что встроить в Dune Region Editor
Планирую еще встроить возможность редактировать тексты. Конечно знаю программу что уже есть Dune hack editor но как по мне недостаток этой проги то что там нельзя выбрать какие тексты редактировать.
Вообще я еще пока думаю лдучше сделать редактор текстов в отдельной проги или в эту запихнуть. Или вообще не делать.
Короче голосуйте.
Alexandr7:
И так. Надеюсь разработчики редактора DUE меня услышат.
Редактор DUE просто клас но и в тоже время у него есть недостатки.
Я бы хотел сделать этот редактор с нуля. Но мешает мне не знания как читать и записывать данные в файлы зданий и юнитов
Короче идея следущая если можно то может кто скинуть исходный код чтения или записи на любом языке. Желательно конечно C или c++ или воовсе на c#
Я думаю найдутся те кто сможет переписать код под c# даже если исходный код вовсе на асемблере
Авторов оригинального DUE укажу разумеетс
А по поводу недостатков:
1. Нельзя редактировать тексты ментатов для Русского
2. Не показываются иконки юнитов. Конечно получить из бинарника это не самый лучшая идея если это вообще возможно но можно заранее подготовить иконки для юнитов и зданий.
Да к томуже это очень удобно если все редакторы окромя редактора карт и миссий будут в одной проге.
SeregaZ:
то есть как это нельзя редактировать тексты ментатов русского?

а по поводу иконок - это из-за 82 версии сборщика. редактор под него делался - в нем появился файл, где были указаны палитры для иконок. по поводу чтения я помница выкладывал скриншоты с хекс редактора, где расписано было где что лежит.
Alexandr7:

--- Цитата: SeregaZ от 27 Июль 2017, 16:29:55 ---то есть как это нельзя редактировать тексты ментатов русского?
--- Конец цитаты ---
Ну вот. Как видно на скриншоте нет там переключения на русский или английский


Добавлено позже:
А увидел. Можно но все както сложно. Может кто просто исходные коды дать

Добавлено позже:
А где сборку 82 скачать. Я чет нашел только 81b

Добавлено позже:
И еще может кто скинуть картинки из этой проги. Лень самому выдергивать и редактировать
SeregaZ:
насчет языка - редактор вобще-то читает что выставлено в файлах сборщика. если там у тебя стоял буржуйский текст ментатов - то он будет показывать буржуйский текст для редактирования. поэтому переключение языка там в другом месте.

по поводу исходников - не получится. 50 тысяч строк кода. много разбросано по разным файлам. я даже сам порой концы найти не могу. поэтому я и выкладывал те скриншоты хекс редактора заводов и юнитов с пометками откуда читать. сам брал эту инфу из старых редакторов. то есть открываешь в хекс редакторе файл юнита или завода, а потом открываешь его же в редакторе. изменяешь какой-то параметр - сохраняешь и смотришь что изменилось. попробуй исходники тех редакторов поискать.

по поводу 82 - так она не вышла из стадии тестирования по моему. я просто думал закончить как раз к выходу 82... но она не вышла, а изменения в редактор уже были внесены. возвращать все взад до 81 в плане иконок сложно... код то не сохранил. на живую переписывал.
Alexandr7:
Да мне код чтения из апписи нужно. Яж не знаю как устроен ьинарник юнитов и зданий. Может есть исходники кода чтения и записи юнитов и зданий
Кстати на каком языке пишется код
SeregaZ:
так простое побайтовое чтение. для твоего языка нет подобных примеров? я использую полудохлый PureBasic. для него ток два форума-калеки есть. еще и платная эта среда разработки... отсюда и отсутствие популярности :)
Alexandr7:
Да найдутся те кто перепишит код с Pure basic на c#
Мне бы сам код чтения ведь каждый бинарнеый файл по своему выглядит и чтобы читать нужно знать какие байты читать какие записывать. Например тыб видел какой идиотский код у меня чтения регионов. Вот кстати весь код точнее пока только написано Чтение и парсинг region_colors.asm
+ Чтение парсинг и запись файла language_info.asm

--- Цитата ---namespace LsPS
{
    public class Load_And_Parsing_Scripts
    {
        static string GetStringAndSize (string aStr, ref int aSizeStr)
        {
            aSizeStr = aStr.Length;
            return aStr.ToLower();
        }

        static int StrIndexOf (string aStr, string aValue)
        {
            return aStr.ToLower().IndexOf(aValue.ToLower());
        }

        public void Read_RCASM (ref int[,] aPtoU, ref int[,] aRC, ref string[] aRMAX, ref string[] aRMAY, ref string[] aRMAUDLR, ref int[] aRM, string aFileName, char aDinasty)
        {
            StreamReader fsr = new StreamReader(aFileName, Encoding.GetEncoding(1251));
            string strRead = "", strSubRead = "";
            int aInd = -1, i1 = 0, l1 = 0;
            bool[] aParsing = new bool[3];
            string[] aArray2;
            while (!fsr.EndOfStream)
            {
                strRead = fsr.ReadLine();
                strSubRead = strRead.Replace(Convert.ToChar(9), ' ').Replace(" ", "");

                if (StrIndexOf(strSubRead, ";epalettes_to_use:" + aDinasty) >= 0)
                    aParsing[0] = false;
                if (StrIndexOf(strSubRead, ";eregion_color:" + aDinasty) >= 0)
                    aParsing[1] = false;
                if (StrIndexOf(strSubRead, ";eregion_map:" + aDinasty) >= 0)
                    aParsing[2] = false;

                if (aParsing[0] == true)
                {
                    aInd++;
                    i1 = StrIndexOf(strSubRead, GetStringAndSize("dc.b", ref l1));
                    aArray2 = strSubRead.Substring(i1 + l1, 7).Split(',');
                    for (int i = 0; i < aArray2.Length; i++)
                        aPtoU[aInd, i] = Convert.ToInt32(aArray2);
                }

                if (aParsing[1] == true)
                {
                    aInd++;
                    i1 = StrIndexOf(strSubRead, GetStringAndSize("dc.w", ref l1));
                    aArray2 = strSubRead.Substring(i1 + l1, 19).Split(',');
                    for (int i = 0; i < aArray2.Length; i++)
                        aRC[aInd, i] = Convert.ToInt32(aArray2);
                }

                if (aParsing[2] == true)
                {
                    aInd++;
                    i1 = StrIndexOf(strSubRead, GetStringAndSize("dc.w", ref l1));
                    aArray2 = strSubRead.Substring(i1 + l1, strSubRead.IndexOf(";", i1 + l1) - (i1 + l1)).Split(',');
                    aRMAX[aInd] = aArray2[0];
                    aRMAY[aInd] = aArray2[1];
                    aRMAUDLR[aInd] = aArray2[1];
                    aRM[aInd] = Convert.ToInt32(aArray2[2]);
                }

                if (StrIndexOf(strSubRead, ";spalettes_to_use:" + aDinasty) >= 0)
                {
                    aParsing[0] = true;
                    aInd = -1;
                }

                if (StrIndexOf(strSubRead, ";sregion_color:" + aDinasty) >= 0)
                {
                    aParsing[1] = true;
                    aInd = -1;
                }
                if (StrIndexOf(strSubRead, ";sregion_map:" + aDinasty) >= 0)
                {
                    aParsing[2] = true;
                    aInd = -1;
                }
                   
            }
            fsr.Close();
        }

        public void Load_LIASM(ref bool[] aLI, string aFileName)
        {
            StreamReader fsr = new StreamReader(aFileName, Encoding.GetEncoding(1251));
            string strRead = "";
            while (!fsr.EndOfStream)
            {
                strRead = fsr.ReadLine().ToLower().Replace(Convert.ToChar(9), ' ').Replace(" ", "");
                if (strRead.IndexOf("ru_dialogs=") >= 0)
                {
                    int i1 = 0, l1 = 0;
                    i1 = StrIndexOf(strRead, GetStringAndSize("ru_dialogs=", ref l1));
                    aLI[0] = Convert.ToBoolean(Convert.ToInt32(strRead.Substring(i1+l1, 1)));
                }
                if (strRead.IndexOf("ru_names=") >= 0)
                {
                    int i1 = 0, l1 = 0;
                    i1 = StrIndexOf(strRead, GetStringAndSize("ru_names=", ref l1));
                    aLI[1] = Convert.ToBoolean(Convert.ToInt32(strRead.Substring(i1 + l1, 1)));
                }
                if (strRead.IndexOf("ru_gfx=") >= 0)
                {
                    int i1 = 0, l1 = 0;
                    i1 = StrIndexOf(strRead, GetStringAndSize("ru_gfx=", ref l1));
                    aLI[2] = Convert.ToBoolean(Convert.ToInt32(strRead.Substring(i1 + l1, 1)));
                }
                if (strRead.IndexOf("ru_password=") >= 0)
                {
                    int i1 = 0, l1 = 0;
                    i1 = StrIndexOf(strRead, GetStringAndSize("ru_password=", ref l1));
                    aLI[3] = Convert.ToBoolean(Convert.ToInt32(strRead.Substring(i1 + l1, 1)));
                }
                if (strRead.IndexOf("ru_sound=") >= 0)
                {
                    int i1 = 0, l1 = 0;
                    i1 = StrIndexOf(strRead, GetStringAndSize("ru_sound=", ref l1));
                    aLI[4] = Convert.ToBoolean(Convert.ToInt32(strRead.Substring(i1 + l1, 1)));
                }
            }
        }

        public void Save_LIASM(bool[] aLI, string aFileName)
        {
            StreamReader fsr = new StreamReader(aFileName, Encoding.GetEncoding(1251));
            string strReadWrite = "", strRead = "", strWrite = "";
            while (!fsr.EndOfStream)
            {
                strReadWrite = fsr.ReadLine();
                strRead = strReadWrite.ToLower().Replace(Convert.ToChar(9), ' ').Replace(" ", "");
                if (strRead.IndexOf("ru_dialogs=") >= 0)
                    strReadWrite = "RU_DIALOGS = " + Convert.ToInt32(aLI[0]).ToString() + "   ; текст ментата, финальные титры";
                if (strRead.IndexOf("ru_names=") >= 0)
                    strReadWrite = "RU_NAMES = " + Convert.ToInt32(aLI[1]).ToString() + "   ; имена юнитов и зданий, титульного экрана, меню паузы";
                if (strRead.IndexOf("ru_gfx=") >= 0)
                    strReadWrite = "RU_GFX = " + Convert.ToInt32(aLI[2]).ToString() + "   ; элементы графики";
                if (strRead.IndexOf("ru_password=") >= 0)
                    strReadWrite = "RU_PASSWORD = " + Convert.ToInt32(aLI[3]).ToString() + " ; пароли";
                if (strRead.IndexOf("ru_sound=") >= 0)
                    strReadWrite = "RU_SOUND = " + Convert.ToInt32(aLI[4]).ToString() + "   ; звуки (для старого движка)";
                strWrite += strReadWrite + Environment.NewLine;
            }
            strWrite.Remove(strWrite.Length - Environment.NewLine.Length, Environment.NewLine.Length);

            fsr.Close();

            StreamWriter fsw = new StreamWriter(aFileName, false, Encoding.GetEncoding(1251));
            fsw.Write(strWrite);
            fsw.Close();
        }
    }
}
--- Конец цитаты ---
Ну конечно его можно облегчить но так как я пишу в отдельной библиотеке чтобы не нагружать главный код то так.
SeregaZ:
ну... на скрине смотрел? там сразу понятно откуда что читать. вот заводские:
Alexandr7:
Ох. Выделено так что не разобраться.
Ну вот к примеру здание

и что здесь за что отвечает
И юнит

Тотже вопрос.
Можешь понятнее разъеснить. Играл в морской бой так вот пиши так к примеру
00,00 - 00,07 pf njnj jndtxf.n b nfr lfktt
Сначало левое потом верхнее. С этим вопросом я обращусь на форум и мне помогут с чтение этих байтов тока не понятно.
Правдо там мне кажется но чтото этих данных маловато для редактора юнитов что в DUE
SeregaZ:
черт знает... по моему все понятно :)

юнитный скриншот:


возможные значения возьми из старых редакторов. прям в столбик выписывай. типа передвижение такое-то пехота такое-то значение, гусеничный - такое-то, летающий - такое-то... я так по крупицам эти значения собирал :) а чего не было в старых редакторах - Ti_ подсказывал.
Alexandr7:
Еще раз. Просмотрел твой файл
Мне не понятно
1 - 82 что именно это оивечает
2 - Приоритет меню.
3. Иконка а именно ее форма
4. Необходимо построить а именно в каком там порядке
5 - 3F выделено не понятно что это
6 - Графика а именно в каком формате
7 - Время строительство в чем измеряется
И да я знаю что это 16теричная система но даже если перевести в 10- кое что не ясно

Добавлено позже:
Ладно мне сначало бы прочитать эти данные обращусь на форум может кто поможет с чтением и записью.
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

Перейти к полной версии