Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Heroes RTS
DF2 :: ФОРУМЫ > Основные форумы > Софт и железо > Программирование / Coding
Baklajan
Требуются программисты на Си (ковыряние чужих исходников на языке, являющимся близкой производной Си) и реверс-инженеры (ковыряние чужого экзешника, откомпилированного с Си, и ничем не защищенного и не запакованного). Также приветствуются любые люди, умеющие писать распаковщики под хитрые деф-подобные форматы файлов.

Тема проекта: http://forum.df2.ru/index.php?showtopic=8422&st=220
gamecreator
я могу исходники анализировать
Baklajan
Одним программистом там не обойдешься - слишком много кода.
Плюс нужен человек, который напишет распаковщик местных дефов. О которых неизвестно ничего, кроме того что это некий .bmp-подобный формат, склеенный кадр за кадром в длинную пленку.
Наконец, каждый кадр (как и часть не-дефообразной графики) хранится в загадочном формате RLE, который ничем не открывается. Рождаются предположения о родстве этого формата со стандартным RLE, который является в свою очередь разновидностью BMP. Однако местные RLE никакими известными редакторами не открываются. Остальная часть графики (причем достаточно большая) хранится в BMP, поэтому остается еще надежда, что разработчики не стали особо мудрить и основали прочие форматы на BMP.
gamecreator
ну думаю формат я расшифрую, а потом и прогу составить можно
Baklajan
Давай свое мыло в личку, пришлю образцы обычного .RLE и .MMP (склеенные RLE)
sergroj
Я тоже могу поучаствовать. Темы как раз интересные. Правда, времени мало.
Baklajan
Могу сразу предложить задание - вскрытие игрового архива с графикой, единственное что пока не удалось распаковать. Точнее, его не распаковывать нужно, - это один гигантский деф, - требуется написать редактор, который позволит его изменять, вытягивая координаты нужных массивов картинок из прилагающихся в обилии .RLE файлов (как выяснилось, в них содержится лишь раскадровка анимации, а сами кадры хранятся в одном большом файле).
sergroj
Попробую.
Baklajan
См. личку - отпиши свой ящик на gmail или заведи себе, если нет. Вышлю со своего рип игры на 400 Мб без видео и реплик юнитов на испанском, но со всем остальным, и свои соображения по поводу организации данных. Все, кроме вызывающих затруднение архивов, распаковано и разложено так, чтобы игра находила данные и работала.
Bourn
Это содержимое плагина экстрактора на Яве для PAK файлов игры
Код
import java.io.File;

public class Plugin_PAK_HMMSYS extends ArchivePlugin
{

   public Plugin_PAK_HMMSYS()
   {
       name = "PAK_HMMSYS";
       canRead = true;
       canWrite = false;
       canReplace = false;
       canRename = false;
       allowImplicitReplacing = true;
       games = (new String[] {
           "Rising Kingdoms"
       });
       extensions = (new String[] {
           "pak"
       });
       columns = Archive.getColumns();
   }

   public int getMatchRating(FileManipulator filemanipulator)
   {
       int i;
       i = 0;
       if(filemanipulator.getExtension().equals(extensions[0]))
           i += 25;
       if(filemanipulator.readString(15).equals("HMMSYS PackFile"))
           i += 50;
       filemanipulator.skip(17);
       int j = filemanipulator.getLength();
       ArchivePlugin.check;
       if(FieldValidator.numFiles(filemanipulator.readIntL()))
           i += 5;
       ArchivePlugin.check;
       if(FieldValidator.length(filemanipulator.readIntL(), j))
           i += 5;
       return i;
       Throwable throwable;
       throwable;
       return 0;
   }

   public Resource[] read(File file)
   {
       Resource aresource[];
       addFileTypes();
       FileManipulator filemanipulator = new FileManipulator(file, "r");
       filemanipulator.skip(32);
       int i = filemanipulator.readIntL();
       ArchivePlugin.check;
       FieldValidator.numFiles(i);
       filemanipulator.skip(4);
       int j = filemanipulator.getLength();
       aresource = new Resource[i];
       WSProgressDialog.loadProgress(i);
       String s = "";
       for(int k = 0; k < i; k++)
       {
           int l = filemanipulator.readByteU();
           int i1 = filemanipulator.readByteU();
           int j1 = l - i1;
           String s1 = "";
           if(i1 > 0)
               s1 = s.substring(0, i1);
           s1 = s1 + filemanipulator.readString(j1);
           s = s1;
           int k1 = filemanipulator.getOffset();
           byte byte0 = 4;
           int l1 = filemanipulator.readIntL();
           ArchivePlugin.check;
           FieldValidator.offset(l1, j);
           int i2 = filemanipulator.getOffset();
           byte byte1 = 4;
           int j2 = filemanipulator.readIntL();
           ArchivePlugin.check;
           FieldValidator.length(j2, j);
           aresource[k] = new ReplacableResource(file, s1, l1, k1, byte0, j2, i2, byte1);
           WSProgressDialog.setProgress(k);
       }

       filemanipulator.close();
       return aresource;
       Throwable throwable;
       throwable;
       Plugin.logError(throwable);
       return null;
   }

А вот описание:
Код
// The filenames are stored so that directory names etc are reused, thus minimising repeats.
// To determine the filename, take the first "Previous Filename Reuse Length" chars of the
// filename of the previous file, and append the "Filename Part" to it.
// In other words, if a directory repeats, you would keep the first X bytes of the previous
// file and just append the actual name of the file.

16 - Header ("HMMSYS PackFile" + (byte)10)
4 - Unknown (26)
12 - null
4 - Number Of Files?
4 - Directory Length [+40 archive header]

// for each file
 1 - Filename Length
 1 - Previous Filename Reuse Length
 X - Filename Part (length = filenameLength - previousFilenameReuseLength)
 4 - File Offset
 4 - File Length
 
X - Padding (repeating 153,121,150,50) until first file offset
X - File Data
Baklajan
Хм. Никогда даже не думал, что все это в Яве хранится открытым кодом. Я думал, такие вещи компилируются...

А как насчет проблемных файлов?
Bourn
файлы действительно компилируються....
файл карт - формат не ясен, не за что зачепиться
большой файл - тоже не понятен, надо смотреть отдельно для каждого RLE
Baklajan
В смысле - действительно компилируются? Куда компилируются? Зачем компилируются?

RandomMap.pak - единственный и неповторимый. Есть у него собратья в первых двух частях игры, могу прислать.

Возможно, тебе также помогут обрезки от главного архива графики предыдущих частей...

Быть может, тебе стоит-таки раскопать в сусеках игру, поставить ее и трассировщиком посмотреть, что же игра делает с файлами? Экзешник-то ничем не защищен от отладки...

Или в SoftIce запустить игрушку и инструкция за инструкцией смотреть, чем игра страдает во время загрузки карты...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.