Результаты поиска
|
|
Сообщений: 1042
|
Опубликовано: 17.06.2013, 00:20:42
Движки одинаковые, OpenGL и XomLib работают так же. Единственное отличие, это коллизионные нагрузки в игре. Поксели очень много жрут, т.к. это трехмерный массив, который при всем этом имеет второй массив коллизионный, они иногда не сходятся, поэтому червь ползает по воздуху. В Forts же коллизионная модель упрощена и неизменна, поэтому игре не нужно ее пересчитывать по многу раз, да и фортс поддерживает больше текстур и видеопамять у него динамическая, не то что в W4 и W3D... Так же используется Face Strip, что помогает игре быстро загрузить 3D модель.
|
|
|
|
Сообщений: 1042
|
Опубликовано: 17.06.2013, 21:14:49
Видеоурок от меня, жаль без звука в конце, думал у ютуба есть возможность добавлять больше одной композиции в видео... АН НЕТ!!!
|
|
|
|
Сообщений: 1042
|
Опубликовано: 17.06.2013, 21:19:24
Цитата (firsacho) что это за технология? http://www.gamedev.ru/terms/TriangleStrips
Цитата (firsacho) я правильно понял? Нет, в WF вся локация статическая и не изменяется во время игры, ее не нужно пересчитывать, создавать новые тени и т.п.
|
|
|
|
Сообщений: 1042
|
Опубликовано: 18.06.2013, 19:13:06
Кто хочет может забирать новую карту "Китайский Ресторан"
Chinese Restaurant http://yadi.sk/d/3XHSSIiC5xn6C
Пак выпущу потом...
|
|
|
|
Сообщений: 1042
|
Опубликовано: 19.06.2013, 13:44:09
firsacho, Я не знаком со всеми современными движками, я знаю лишь ядро в движках обычно используется или GL или DX. Для DX все уже продумано и существует функция ID3DXMesh::Optimize() А вот для GL все сложнее... Там сторонняя библиотека NvTriStrip, в XomView я писал свою функцию по переводу Triangle -> Triangle Strip, она не оптимизирована, но работает! Оптимизация состоит в том, что индексы выстраиваются по порядку и таким образом, что при рендеринге обращение к вертексам минимальное. Вот прочитай про оптимизацию http://www.gamedev.ru/tip/?id=75 P.S. Вообще это было в 2004 сейчас используют другую технологию, которую я пока не изучал....
|
|
|
|
Сообщений: 1042
|
Опубликовано: 20.06.2013, 14:44:32
В общем контейнеры *.aud со звуками расшифровали, можно заменять, если знать как. XomView их открывает, но не проигрывает =) Вот ищу способ добавить возможность проигрывания музыки Пока не вижу никаких иных путей кроме использования dll.... Кстати W3D имеет туже структуру.
|
|
|
|
Сообщений: 1042
|
Опубликовано: 20.06.2013, 18:11:01
Цитата (agent007) и ещё, можно ли изменять здания, случайно раставленные на карте в W4? Можно, это поксельные объекты, но чтобы к ним добраться нужно хорошо знать структуру, поэтому не советую лезть в это =) Цитата (agent007) слить W3DMapEditor и XomView? W3DMapEditor уже использует библиотеку XomLib, которая позволяет ему загружать объекты (эмиттеры). Совмещать я их не планирую, уж больно разная у них функциональность. XomView в первую очередь просмоторщик, а не редактор, то что он стал редактировать некоторые данные, не делает из него полноценный редактор. W3DMapEditor же наоборот, может с нуля создать карту, т.е. он полностью управляет всеми данными, и является полноценным редактором. По поводу проигрывания музыки, тут некоторые проблемы, не люблю я dll... но других путей нет, придется таскать с exe еще и dll...
|
|
|
|
Сообщений: 1042
|
Опубликовано: 21.06.2013, 00:05:06
Как вам?
|
|
|
|
Сообщений: 1042
|
Опубликовано: 22.06.2013, 01:56:07
Цитата (agent007) ждём новой версии http://w4tweaks.ru/load....-0-1763
|
|
|
|
Сообщений: 1042
|
Опубликовано: 23.06.2013, 01:12:35
Новая версия загрузчика игры WFLauncher, в котором включен загрузчик модов.
Подробнее
|
|
|
|
Сообщений: 1042
|
Опубликовано: 23.06.2013, 13:22:52
Может пока у меня есть время, создать разделы по W3D и WF? Я тогда залью весь материал по этим играм, что имеется у меня.... А то уехать могу на лето...
|
|
|
|
Сообщений: 1042
|
Опубликовано: 23.06.2013, 22:02:20
Цитата (firsacho) оказался весьма прост в редактировании и легко можно его модифицировать с помощью вполне известных прог. Какими например?
|
|
|
|
Сообщений: 1042
|
Опубликовано: 24.06.2013, 00:59:46
Читал я уже эти исходники... очень странный код, но я его всунул в XomView , теперь он может проигрывать и эти игры!
|
|
|
|
Сообщений: 1042
|
Опубликовано: 24.06.2013, 12:58:07
Исходников в сети я не нашел... На сайте производителя есть лишь FMOD Ex API в которой лежит fsbanklibex_vc.lib не представляющая для меня никакой ценности. Или я плохо искал или с этим форматом и правда туго...
По поводу программ вот хорошая прога http://aezay.site11.com/aezay/fsbextractor/
Прочитал я про этот FMOD. В общем fsb это готовый скомпилированный файл, тоже самое что .exe , а чтобы его изменить нужен исходный файл fsp - файл проекта, которого у нас нет, поэтому как выход нужно создать проект точно такой же структуры, он сохранит fsb который уже сможет проигрывать игра.
|
|
|
|
Сообщений: 1042
|
Опубликовано: 26.06.2013, 02:56:29
Так как я добавил в новый 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. может данная инфа будет кому полезна =)
|
|
|
|
Сообщений: 1042
|
Опубликовано: 26.06.2013, 03:07:57
А вот музыку все таки проиграть у меня не получилось... там странная система кодирования каналов... все звуки отлично играются, а музыка с глюками...
|
|
|
|
Сообщений: 1042
|
Опубликовано: 26.06.2013, 16:24:46
В общем попытался анализировать музыку и нашел взаимосвязь.. в sab файле каналы чередуются через определенное количество байт, которое я еще не смог вычислить... Вот картинка волн, на ней оригинальная музыка со стерео дорожками и дорожка взятая из файла sab как моно канал, как видно тут идут блоки левый канал, правый канал...
|
|
|
|
Сообщений: 1042
|
Опубликовано: 26.06.2013, 17:07:11
Раскодировал!!! В общем в 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
При импорте стереомузыки нужно менять это значение на ту длину семплов на канал, который у вас в аудиофайле!!!!
|
|
|
|
Сообщений: 1042
|
Опубликовано: 27.06.2013, 15:37:35
Цитата (Jhonny) Девочка. Просто девочка.. Неплохо!!! Только пропорции не соблюдены, а голова хорошо получилась =)
|
|
|
|
Сообщений: 1042
|
Опубликовано: 28.06.2013, 22:52:00
Цитата (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...
|
|
|
|