Автор Тема: Реверсинженеринг структуры файлов не использующих шифрование  (Прочитано 64205 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн doom_sun

  • REALьный 3DOшник
  • Ветеран
  • *
  • Сообщений: 1344
На сколько понял - расширить автопарк - уже решённый вопрос...

Versus это случаем не ты - Archive 3DO?
Трудные вещи становятся только труднее, если их откладывать.

(с) Джордж Р.Р. Мартин "Таинственный рыцарь"

Оффлайн Versus

  • REALьный 3DOшник
  • Постоялец
  • *
  • Сообщений: 194
  • URSS creator
А что ещё можно сделать?

- Можно свои объекты добавить?
- Можно геометрию изменить?
Ну, навскидку можно расширить дорогу, но тогда машина будет проезжать сквозь текстуры трассы. Можно добавить свои или убрать объекты (пока что знаю, как добавить плоские и угловые). Поменять фон можно...
Из серьезного - нарисовать свой трек. Но тут скорее больше вопросов, чем ответов, хотя свет в конце тоннеля виден. ))) Сразу оговорюсь, что я писал только выдергивалку трасс, а не запихивалку обратно. Это отдельный челендж. Так вот, трассу для физического движка свою сделать можно. А вот с рельефом сложность. Отдельный блок рельефа, которых дофигища в треке, состоит из 3D данных и фоновой cel картинки. То есть, мы продвигаемся вперед и фоновые картинки, появляясь одна за другой, маскируют недалеко отрисованную 3D трассу. Это можно увидеть, если включить в фениксе аппаратную отрисовку. Помимо этого, есть еще много параметров в этом блоке, назначение которых я не знаю. То есть, свой 3D рельеф я запихать смогу, даже cel картинку, наверное... Но сделать так, чтобы фоновые картинки появлялись в нужных местах, вовремя и соответствующего размера... Вряд ли. К тому же, они пререндеренные. Как это делать - хз.
IBI VICTORIA UBI CONCORDIA

Оффлайн Versus

  • REALьный 3DOшник
  • Постоялец
  • *
  • Сообщений: 194
  • URSS creator
или расширить автопарк, добавить возможность выбора любого сегмента трассы, режим на 2х с разделением экрана ;D
Нет, это точно нет.
Archive 3DO - не я.
IBI VICTORIA UBI CONCORDIA

Оффлайн doom_sun

  • REALьный 3DOшник
  • Ветеран
  • *
  • Сообщений: 1344
Ну понятно, что collision для текстур трассы надо делать, чтобы машины сквозь них не проезжали...

Надо писать "запихивалку" :-D Тогда, хотя бы, можно будет текстуры машин подменить и свои объекты засунуть, чтобы если уж не трассы поменять на новые, то хотя бы украсить старые.
Трудные вещи становятся только труднее, если их откладывать.

(с) Джордж Р.Р. Мартин "Таинственный рыцарь"

Оффлайн Versus

  • REALьный 3DOшник
  • Постоялец
  • *
  • Сообщений: 194
  • URSS creator
Не, сейчас мне интереснее DeathKeep, вот только не дорублюсь никак как Altmer получил эти картинки. У меня получается пока так:
IBI VICTORIA UBI CONCORDIA

Оффлайн Versus

  • REALьный 3DOшник
  • Постоялец
  • *
  • Сообщений: 194
  • URSS creator
-Второй этаж уровня 0.
IBI VICTORIA UBI CONCORDIA

Оффлайн Versus

  • REALьный 3DOшник
  • Постоялец
  • *
  • Сообщений: 194
  • URSS creator
И третий этаж. А должно получаться не так. На предыдущих страницах у Altmera получалось... Что-то я не так делаю...
IBI VICTORIA UBI CONCORDIA

Оффлайн Versus

  • REALьный 3DOшник
  • Постоялец
  • *
  • Сообщений: 194
  • URSS creator
Altmer, можно глянуть код, который работает с файлами Deathkeep? Или пощупать приложение, которое выдает это:
http://www.arts-union.ru/smf/index.php?topic=863.msg14349#msg14349
IBI VICTORIA UBI CONCORDIA

Оффлайн Altmer

  • Администратор
  • Ветеран
  • *******
  • Сообщений: 4222
Altmer, можно глянуть код, который работает с файлами Deathkeep? Или пощупать приложение, которое выдает это:
http://www.arts-union.ru/smf/index.php?topic=863.msg14349#msg14349

Код: C++
  1. /*
  2.  * File: death-keep-level
  3.  * Created on: Вс дек 11 16:44:23 2016
  4.  * Author: Altmer
  5.  */
  6.  
  7. void makemap(grid @g, uint64 off)
  8. {
  9.     int sk=32;
  10.     g.resize(64,32);
  11.     for(int i=0;i<32;i++)
  12.     {
  13.         for(int j=0;j<64;j++)
  14.         {    
  15.             int ind=(j*sk+i)*8;
  16.             int x=j;
  17.             int y=i;
  18.             g.color(x,y,u32((ind)*8+4)|u32b((ind)*8));
  19.         }
  20.     }
  21. }
  22.  
  23. void makemap1(grid @g, uint64 off)
  24. {
  25.     int sk=32;
  26.     g.resize(64,32);
  27.     for(int i=0;i<32;i++)
  28.     {
  29.         for(int j=0;j<64;j++)
  30.         {    
  31.             int ind=(j*sk+i)*8+1;
  32.             int x=j;
  33.             int y=i;
  34.             g.color(x,y,u32((ind)*8+4)|u32b((ind)*8));
  35.         }
  36.     }
  37. }
  38.  
  39. void makemap2(grid @g, uint64 off)
  40. {
  41.     int sk=32;
  42.     g.resize(64,32);
  43.     for(int i=0;i<32;i++)
  44.     {
  45.         for(int j=0;j<64;j++)
  46.         {    
  47.             int ind=(j*sk+i)*8+2;
  48.             int x=j;
  49.             int y=i;
  50.             g.color(x,y,u32((ind)*8+4)|u32b((ind)*8));
  51.         }
  52.     }
  53. }
  54.  
  55. void makemap3(grid @g, uint64 off)
  56. {
  57.     int sk=32;
  58.     g.resize(64,32);
  59.     for(int i=0;i<32;i++)
  60.     {
  61.         for(int j=0;j<64;j++)
  62.         {    
  63.             int ind=(j*sk+i)*8+3;
  64.             int x=j;
  65.             int y=i;
  66.             g.color(x,y,u32((ind)*8+4)|u32b((ind)*8));
  67.         }
  68.     }
  69. }
  70.  
  71. void makemap4(grid @g, uint64 off)
  72. {
  73.     int sk=32;
  74.     g.resize(64,32);
  75.     for(int i=0;i<32;i++)
  76.     {
  77.         for(int j=0;j<64;j++)
  78.         {    
  79.             int ind=(j*sk+i)*8+4;
  80.             int x=j;
  81.             int y=i;
  82.             g.color(x,y,u32((ind)*8+4)|u32b((ind)*8));
  83.         }
  84.     }
  85. }
  86.  
  87. void makemap5(grid @g, uint64 off)
  88. {
  89.     int sk=32;
  90.     g.resize(64,32);
  91.     for(int i=0;i<32;i++)
  92.     {
  93.         for(int j=0;j<64;j++)
  94.         {    
  95.             int ind=(j*sk+i)*8+5;
  96.             int x=j;
  97.             int y=i;
  98.             g.color(x,y,u32((ind)*8+4)|u32b((ind)*8));
  99.         }
  100.     }
  101. }
  102.  
  103. void makemap6(grid @g, uint64 off)
  104. {
  105.     int sk=32;
  106.     g.resize(64,32);
  107.     for(int i=0;i<32;i++)
  108.     {
  109.         for(int j=0;j<64;j++)
  110.         {    
  111.             int ind=(j*sk+i)*8+6;
  112.             int x=j;
  113.             int y=i;
  114.             g.color(x,y,u32((ind)*8+4)|u32b((ind)*8));
  115.         }
  116.     }
  117. }
  118.  
  119. void makemap7(grid @g, uint64 off)
  120. {
  121.     int sk=32;
  122.     g.resize(64,32);
  123.     for(int i=0;i<32;i++)
  124.     {
  125.         for(int j=0;j<64;j++)
  126.         {    
  127.             int ind=(j*sk+i)*8+7;
  128.             int x=j;
  129.             int y=i;
  130.             g.color(x,y,u32((ind)*8+4)|u32b((ind)*8));
  131.         }
  132.     }
  133. }
  134.  
  135. int main()
  136. {
  137.     uint64 size=sizeof("");
  138.    
  139.     legend("","text:Floor 0");
  140.     legend("","grid,12:makemap");
  141.     legend("","text:Floor 1");    
  142.     legend("","grid,12:makemap1");
  143.     legend("","text:Floor 2");    
  144.     legend("","grid,12:makemap2");
  145.     legend("","text:Floor 3");    
  146.     legend("","grid,12:makemap3");
  147.     legend("","text:Floor 4");    
  148.     legend("","grid,12:makemap4");
  149.     legend("","text:Floor 5");    
  150.     legend("","grid,12:makemap5");
  151.     legend("","text:Floor 6");    
  152.     legend("","grid,12:makemap6");
  153.     legend("","text:Floor 7");    
  154.     legend("","grid,12:makemap7");
  155.    
  156.     return 0;
  157. }
  158.  

Вот скрипт, но приложение надо реанимировать ) Хотя из скрипта ты можешь понять как получаются индексы блоков.
- Разве ты не устал от борьбы, от каменистых дорог?
- Нет.
- Как странно, ведь многие так ценят покой...
                                             E. Гуляковский, "Сезон туманов"

Оффлайн Versus

  • REALьный 3DOшник
  • Постоялец
  • *
  • Сообщений: 194
  • URSS creator
IBI VICTORIA UBI CONCORDIA

Оффлайн Versus

  • REALьный 3DOшник
  • Постоялец
  • *
  • Сообщений: 194
  • URSS creator
Что-то я туплю...  ::dash:
Читается 64-битное число (8 байт), оно же является условным вокселем. Этих вокселей в файле по 64*32 на этаж. То есть, начало файла - Floor0 с 0x0 до 0х4000. И начинаем построение обычной таблицы 64 столбца на 32 ряда.
Цвет для ячейки таблицы расчитывается из этого 64-битного числа. Какой цвет будет не особенно важно.
Но блин у меня не получаются такие картинки, хоть тресни...  ::dash: Получаются как бы с какой-то сдвижкой. Позже выложу результат. Вроде и просто все, но уперся непонятно во что...
IBI VICTORIA UBI CONCORDIA

Оффлайн Versus

  • REALьный 3DOшник
  • Постоялец
  • *
  • Сообщений: 194
  • URSS creator
Выложу только этажи с данными уровня 0.
IBI VICTORIA UBI CONCORDIA

Оффлайн Versus

  • REALьный 3DOшник
  • Постоялец
  • *
  • Сообщений: 194
  • URSS creator
Следующий:
IBI VICTORIA UBI CONCORDIA

Оффлайн Versus

  • REALьный 3DOшник
  • Постоялец
  • *
  • Сообщений: 194
  • URSS creator
И с выходом из уровня (предположительно).
IBI VICTORIA UBI CONCORDIA

Оффлайн Versus

  • REALьный 3DOшник
  • Постоялец
  • *
  • Сообщений: 194
  • URSS creator
Если же поменять местами ширину и длину, то тоже получается не так:
IBI VICTORIA UBI CONCORDIA