Полная версия этой страницы:
Heroes RTS
Baklajan
17 Mar 2008, 20:25
Требуются программисты на Си (ковыряние чужих исходников на языке, являющимся близкой производной Си) и реверс-инженеры (ковыряние чужого экзешника, откомпилированного с Си, и ничем не защищенного и не запакованного). Также приветствуются любые люди, умеющие писать распаковщики под хитрые деф-подобные форматы файлов.
Тема проекта:
http://forum.df2.ru/index.php?showtopic=8422&st=220
gamecreator
18 Mar 2008, 21:27
я могу исходники анализировать
Baklajan
18 Mar 2008, 22:37
Одним программистом там не обойдешься - слишком много кода.
Плюс нужен человек, который напишет распаковщик местных дефов. О которых неизвестно ничего, кроме того что это некий .bmp-подобный формат, склеенный кадр за кадром в длинную пленку.
Наконец, каждый кадр (как и часть не-дефообразной графики) хранится в загадочном формате RLE, который ничем не открывается. Рождаются предположения о родстве этого формата со стандартным RLE, который является в свою очередь разновидностью BMP. Однако местные RLE никакими известными редакторами не открываются. Остальная часть графики (причем достаточно большая) хранится в BMP, поэтому остается еще надежда, что разработчики не стали особо мудрить и основали прочие форматы на BMP.
gamecreator
19 Mar 2008, 01:23
ну думаю формат я расшифрую, а потом и прогу составить можно
Baklajan
19 Mar 2008, 01:45
Давай свое мыло в личку, пришлю образцы обычного .RLE и .MMP (склеенные RLE)
sergroj
20 Mar 2008, 21:29
Я тоже могу поучаствовать. Темы как раз интересные. Правда, времени мало.
Baklajan
21 Mar 2008, 08:28
Могу сразу предложить задание - вскрытие игрового архива с графикой, единственное что пока не удалось распаковать. Точнее, его не распаковывать нужно, - это один гигантский деф, - требуется написать редактор, который позволит его изменять, вытягивая координаты нужных массивов картинок из прилагающихся в обилии .RLE файлов (как выяснилось, в них содержится лишь раскадровка анимации, а сами кадры хранятся в одном большом файле).
sergroj
21 Mar 2008, 23:25
Попробую.
Baklajan
22 Mar 2008, 00:42
См. личку - отпиши свой ящик на gmail или заведи себе, если нет. Вышлю со своего рип игры на 400 Мб без видео и реплик юнитов на испанском, но со всем остальным, и свои соображения по поводу организации данных. Все, кроме вызывающих затруднение архивов, распаковано и разложено так, чтобы игра находила данные и работала.
Это содержимое плагина экстрактора на Яве для 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
23 Mar 2008, 03:34
Хм. Никогда даже не думал, что все это в Яве хранится открытым кодом. Я думал, такие вещи компилируются...
А как насчет проблемных файлов?
файлы действительно компилируються....
файл карт - формат не ясен, не за что зачепиться
большой файл - тоже не понятен, надо смотреть отдельно для каждого RLE
Baklajan
23 Mar 2008, 11:42
В смысле - действительно компилируются? Куда компилируются? Зачем компилируются?
RandomMap.pak - единственный и неповторимый. Есть у него собратья в первых двух частях игры, могу прислать.
Возможно, тебе также помогут обрезки от главного архива графики предыдущих частей...
Быть может, тебе стоит-таки раскопать в сусеках игру, поставить ее и трассировщиком посмотреть, что же игра делает с файлами? Экзешник-то ничем не защищен от отладки...
Или в SoftIce запустить игрушку и инструкция за инструкцией смотреть, чем игра страдает во время загрузки карты...
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.