[ Обновленные темы · Новые сообщения · Участники · Поиск · RSS ]
Результаты поиска
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Движки одинаковые, OpenGL и XomLib работают так же. Единственное отличие, это коллизионные нагрузки в игре. Поксели очень много жрут, т.к. это трехмерный массив, который при всем этом имеет второй массив коллизионный, они иногда не сходятся, поэтому червь ползает по воздуху. В Forts же коллизионная модель упрощена и неизменна, поэтому игре не нужно ее пересчитывать по многу раз, да и фортс поддерживает больше текстур и видеопамять у него динамическая, не то что в W4 и W3D... Так же используется Face Strip, что помогает игре быстро загрузить 3D модель.

 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Видеоурок от меня, жаль без звука в конце, думал у ютуба есть возможность добавлять больше одной композиции в видео... АН НЕТ!!!



 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Цитата (firsacho)
что это за технология?

http://www.gamedev.ru/terms/TriangleStrips

Цитата (firsacho)
я правильно понял?

Нет, в WF вся локация статическая и не изменяется во время игры, ее не нужно пересчитывать, создавать новые тени и т.п.


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Кто хочет может забирать новую карту
"Китайский Ресторан"

Image Hosted by ImageShack.us

Chinese Restaurant
http://yadi.sk/d/3XHSSIiC5xn6C

Пак выпущу потом...


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
firsacho, Я не знаком со всеми современными движками, я знаю лишь ядро в движках обычно используется или GL или DX.
Для DX все уже продумано и существует функция ID3DXMesh::Optimize()
А вот для GL все сложнее... Там сторонняя библиотека NvTriStrip, в XomView я писал свою функцию по переводу Triangle -> Triangle Strip, она не оптимизирована, но работает!
Оптимизация состоит в том, что индексы выстраиваются по порядку и таким образом, что при рендеринге обращение к вертексам минимальное.
Вот прочитай про оптимизацию http://www.gamedev.ru/tip/?id=75
P.S. Вообще это было в 2004 сейчас используют другую технологию, которую я пока не изучал....


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
В общем контейнеры *.aud со звуками расшифровали, можно заменять, если знать как. XomView их открывает, но не проигрывает =) Вот ищу способ добавить возможность проигрывания музыки B) Пока не вижу никаких иных путей кроме использования dll....
Кстати W3D имеет туже структуру.


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Цитата (agent007)
и ещё, можно ли изменять здания, случайно раставленные на карте в W4?

Можно, это поксельные объекты, но чтобы к ним добраться нужно хорошо знать структуру, поэтому не советую лезть в это =)
Цитата (agent007)
слить W3DMapEditor и XomView?

W3DMapEditor уже использует библиотеку XomLib, которая позволяет ему загружать объекты (эмиттеры).
Совмещать я их не планирую, уж больно разная у них функциональность. XomView в первую очередь просмоторщик, а не редактор, то что он стал редактировать некоторые данные, не делает из него полноценный редактор. W3DMapEditor же наоборот, может с нуля создать карту, т.е. он полностью управляет всеми данными, и является полноценным редактором.
По поводу проигрывания музыки, тут некоторые проблемы, не люблю я dll... но других путей нет, придется таскать с exe еще и dll...


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Как вам? B)


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Цитата (agent007)
ждём новой версии

http://w4tweaks.ru/load....-0-1763


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Новая версия загрузчика игры WFLauncher, в котором включен загрузчик модов.

Image Hosted by ImageShack.us

Подробнее


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Может пока у меня есть время, создать разделы по W3D и WF? Я тогда залью весь материал по этим играм, что имеется у меня.... А то уехать могу на лето...

 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Цитата (firsacho)
оказался весьма прост в редактировании и легко можно его модифицировать с помощью вполне известных прог.

Какими например?


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Читал я уже эти исходники... очень странный код, но я его всунул в XomView B) , теперь он может проигрывать и эти игры!

 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Исходников в сети я не нашел... На сайте производителя есть лишь FMOD Ex API в которой лежит fsbanklibex_vc.lib не представляющая для меня никакой ценности. Или я плохо искал или с этим форматом и правда туго...

По поводу программ вот хорошая прога
http://aezay.site11.com/aezay/fsbextractor/

Прочитал я про этот FMOD. В общем fsb это готовый скомпилированный файл, тоже самое что .exe , а чтобы его изменить нужен исходный файл fsp - файл проекта, которого у нас нет, поэтому как выход нужно создать проект точно такой же структуры, он сохранит fsb который уже сможет проигрывать игра.


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Так как я добавил в новый XomView проигрывание sob /sab звуков, то могу сказать со 100% уверенностью урок данный можно выкинуть в топку, он не верен на корню!!!
например числа в уроке:

00 7D 00 00 = (freq) - частота 32000Hz
00 3F DD 00 = (size) - размер 14 499 584 байт

В общем структура sob файла такая:
Код

    TSOB_HEADER = packed record
          id : array[0..3] of char; //   CTF2
          ver: array[0..3] of byte; //01 00 00 02
          numsamples: Longword;
          unknown: Longword;
          end;

    TSOB_SAMPLE = packed record
          id : array[0..3] of byte;// 01 01 00 00
          FF : Longword; // ffffffff
          zeros: array[0..5] of Longword;
          items: longword; //01
          dummy: array[0..1] of Longword;
          end;

а sab файла следующая:
Код

   TSAB_HEADER = packed record
          id : array[0..3] of char; //   CSW2
          ver: array[0..3] of byte; //01 00 00 02
          numsamples: Longword;
          unknown: Longword;
          offset: Longword;
          nSlotNumber: Longword;
          end;

    TSAB_SAMPLE = packed record
          is_file: Longword;
          chan: Longword;
          freq: Longword;
          size: Longword;
          loopstart: Longword;
          loopend: Longword;
          offset: Longword;
          end;


Сам процесс считывания sob информации идет так:
Код

   SOB.LoadFromFile(filename);

    SOB.ReadBuffer(sobh,sizeof(sobh));
    num:=sobh.numsamples;
    SOBChunks.Count:=num;

     for i := 0 to  num-1 do begin
         SOB.ReadBuffer(sobs,sizeof(sobs));   

         if sobs.FF<>$ffffffff then begin
          Showmessage(format('Error reading SOB stream[%d] 0x%x',[i,SOB.Position]));
          goto closep;
          end;
         if (sobs.id[0]and 1)>0 then SOB.Seek(64,1);
         case sobs.id[0] of
         0,1,5: AddSoundItem;     //     101B
         8,9: AddSequeenceItem;   //    1001B
         32:  AddInterleavedItem; //  100000B
         65:  AddMatrixItem;      // 1000001B
         end;

     end;

     // читаем названия
     for i := 0 to  num-1 do begin
       SOB.ReadBuffer(id,4);
       SOB.ReadBuffer(namesize,4);
       FillChar(cname,255,0);
       SOB.ReadBuffer(cname,namesize);
       SOBChunks[i].Name:=cname;      
     end;


В зависимости от типа меняется длинная считываемого контейнера, краткое описание функций считывания:

Код


    procedure AddSoundItem();
    var
    k:integer;
    begin
       Node.Text:='soundItem';
       for k:=1 to sobs.items do begin
            INode:=Tree.Items.AddChild(Node,'entryItem');         
            SOB.Read(val,4); // index;
            AddReadVal(INode,'sampleBankIndex');
            AddReadVal(INode,'sampleObjectIndex');
            SOB.Seek(4*4,1);
          //  AddReadVal(INode,'level');
          //  AddReadVal(INode,'cents');
         //   AddReadVal(INode,'randomCents');
         //   AddReadVal(INode,'randomLevel');
            end;
    end;

    procedure AddSequeenceItem();
    var
    k:integer;
    begin
       Node.Text:='sequenceItem';
       for k:=1 to sobs.items do begin
            INode:=Tree.Items.AddChild(Node,'trackItem');
            SOB.Read(val,4); // index;
            AddReadVal(INode,'soundBank');
            AddReadVal(INode,'soundName');
            AddReadValf(INode,'time');
            end;
    end;

    procedure AddMatrixItem();
    var
    k:integer;
    begin
       Node.Text:='matrixItem';
       SOB.Seek(32,1); // matrixItem 2(matrixItem)
       for k:=1 to sobs.items do begin
            INode:=Tree.Items.AddChild(Node,'matrixItem');
            AddReadVal(INode,'sampleBankIndex');
            AddReadVal(INode,'sampleObjectIndex');
            SOB.Seek(4*2,1);
            end;
    end;

    procedure AddInterleavedItem();
    var
    k:integer;
    begin
       Node.Text:='interleavedItem';
       for k:=1 to sobs.items do begin
            INode:=Tree.Items.AddChild(Node,'sampleItem');
            AddReadVal(INode,'sampleBankIndex');
            AddReadVal(INode,'sampleObjectIndex');
            SOB.Seek(4*2,1);
            end;
    end;


Для sab файла:
Код

      SAB.LoadFromFile(filename);
      SAB.ReadBuffer(sabh,sizeof(sabh));
      num:=sabh.numsamples;
      baseoffset:=sizeof(sabh)+sizeof(sabs)*num;
      SABChunks.Count:=num;
      for i := 0 to  num-1 do begin    
          SAB.ReadBuffer(sabs,sizeof(sabs));
          oldpos:=SAB.Position;
          SAB.Position:=baseoffset+sabs.offset;
          // выделяем место в памяти под wav дату и копируем туда инфу
          SAB.ReadBuffer(p^,Size);
          SAB.Position:=oldpos;
          end;
     end;


P.S. может данная инфа будет кому полезна =)


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
А вот музыку все таки проиграть у меня не получилось... там странная система кодирования каналов... все звуки отлично играются, а музыка с глюками...

 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
В общем попытался анализировать музыку и нашел взаимосвязь.. в sab файле каналы чередуются через определенное количество байт, которое я еще не смог вычислить...
Вот картинка волн, на ней оригинальная музыка со стерео дорожками и дорожка взятая из файла sab как моно канал, как видно тут идут блоки левый канал, правый канал...


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Раскодировал!!! В общем в TSAB_HEADER неизвестное значение это SampleAlign т.е. длинна семпла одного канала
Код
TSAB_HEADER = packed record    
             id : array[0..3] of char; //   CSW2    
             ver: array[0..3] of byte; //01 00 00 02    
             numsamples: Longword;    
             aSampleAlign: Longword;    
             offset: Longword;    
             nSlotNumber: Longword;    
             end;    

Теперь все работает!!!

ссылка на XomView

При импорте стереомузыки нужно менять это значение на ту длину семплов на канал, который у вас в аудиофайле!!!!


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Цитата (Jhonny)
Девочка. Просто девочка..

Неплохо!!! Только пропорции не соблюдены, а голова хорошо получилась =)


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Цитата (53454546)
captured
flawless
jump1
kamikaze
Missing!

"captured" have index 5 and not used in sob... but exist in sab!!! Team17 not used this sounds in game!

captured - 5
flawes - 16
jump1 - 23
kamikaze - 26

XomView can play only sounds what included in SOB library...


 
Поиск: