Перейти к содержимому


Внимание!

Это форум по извлечению ресурсов из игр: музыки, звуков, текстур, 3D-моделей...
Перед поиском ответов на форуме, рекомендуется ознакомиться с основным сайтом EXTRACTOR.ru!
[ Прочтите внимательно - правила создания тем и ответа в них ]
Все вопросы по запуску игр задавайте в другом месте: Установка и запуск игр.


Фотография

Battlefield 3


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 7

#1 Engineer

Engineer

    Рядовой

  • Пользователи
  • 3 сообщений

Отправлено 06 March 2012 - 01:09

Всем привет!
Подскажите, кто знает, каким софтом можно извлечь музыку и аудио-сэмплы игры?
Файлы большого размера с расширением cas лежат по адресу: C:\Program Files (x86)\Origin Games\Battlefield 3\Data
cas_01.cas
cas_02.cas
cas_03.cas
и так далее - всего 10 штук. Размеры от 1Гб до 1,06Гб, а общий размер всех архивов = 10,50Гб. По логике, именно в них и находятся ресурсы игры.
Система - Windows 7 (x64).
Помогите добраться до недр, плиз... B)

#2 -=CHE@TER=-

-=CHE@TER=-

    Полковник

  • Администраторы
  • 971 сообщений
  • Пол:Мужчина

Отправлено 06 March 2012 - 16:34

Вот здесь Battlefield 3 Decryptor есть какой-то расшифровщик. Музыку и звуки, наверное, после расшифровки можно какими-нибудь парсерами поискать.

#3 Engineer

Engineer

    Рядовой

  • Пользователи
  • 3 сообщений

Отправлено 06 March 2012 - 17:56

Вот здесь Battlefield 3 Decryptor есть какой-то расшифровщик. Музыку и звуки, наверное, после расшифровки можно какими-нибудь парсерами поискать.


Большущее спасибо! Хоть какая-то надежда появилась, а то искал-искал - глухо.
Только вот я не умею пользоваться таким софтом, к сожалению, даже не представляю, кто такие парсеры... :unsure:

Может быть подскажите, как что и куда... :huh:
Наверняка многие из форумчан имеют эту мега-игру (BF3).

Сообщение отредактировал Engineer: 07 March 2012 - 00:36


#4 -=CHE@TER=-

-=CHE@TER=-

    Полковник

  • Администраторы
  • 971 сообщений
  • Пол:Мужчина

Отправлено 07 March 2012 - 17:31

Парсер, риппер, короче, любая программа, которая способна просканировать архив (ествественно расшифрованный, иначе она ничего не найдёт), найти и извлечь оттуда звуковые файлы. Я не знаю в каком формате игра хранит музыку/звуки, так что какой-то конкретный парсер/риппер/сканер посоветовать не могу - можно брать и сканировать любой программой, тем же Dragon Unpacker например.
Можно ещё на форуме, ссылку на который я привёл выше, спросить вытаскивал ли там кто-нибудь звук.
У меня игры нет и мне она не интересна, так что особо помочь не смогу.

#5 Axsis

Axsis

    Старший сержант

  • Пользователи
  • 74 сообщений
  • Пол:Мужчина

Отправлено 08 March 2012 - 17:02

я ковырял NFS: The Run, которая использует Frostbite2 - тот же движок что и BF3. на xentax'е есть по ней тема.
аудио там пожато очередной разновидностью adpcm, причём судя по всему, как и для других типов ресурсов (текстуры, модели), заголовок со служебной информацией хранится отдельно от самих сжатых данных. так что никакие парсеры там ничего дельного не найдут. вообще если EA не выпустит какой-нить SDK для этого движка (а они пока не собираются) в ближайшее время из ресурсов вряд ли удастся что-то достать в удобоваримом виде.

#6 Engineer

Engineer

    Рядовой

  • Пользователи
  • 3 сообщений

Отправлено 09 March 2012 - 14:25

-=CHE@TER=-, Axsis - спасибо за ответы!
Очень жаль, что с этим движком все так сложно. Но все же будем надеятся на приятные новости!
Прошу форумчан добавлять любую информацию о возможных способах изьятия звуковых сэмплов из Battlefield 3 в эту тему.

#7 sterh

sterh

    Рядовой

  • Пользователи
  • 1 сообщений

Отправлено 26 March 2012 - 07:43

Я вообщем тоже довольно давно ищу способ заграбить звуковые файлы из Батлфилда, но пока результат весьма не утешительный. SDK появится не скоро так как разработчики планируют еще несколько дополнений.

Единственное что удалось накопать "стоящего" так это cas-extractor. Но на самом деле он ничего не извлекает, лишь создает структуру каталогов и сует туда текстовые фалы с оригинальным названием фалов с их расширений и хэш подписью. Сие произведение чела под ником Frankelstner который разместил свой пост со скриптом на форуме сайта http://www.bfeditor.org обещался продолжить свои изыскания но пока на этом все и заглохло.

Привожу его скрипты их 2, на сколько я понял 2-й это небольшой апдейт первого. Для работы скрипта вам понадобиться Python 2.х версии (весит примерно 14мб)
Сохраняем текстовый файл с расширением ".py" в каталоге Battlefield 3\Data и запускаем его от туда. Он начнет сканирование и будет сохранять структуру в папке save которую создаст там же. Автор рекомендует остановить процесс после 49000 единиц (он дошел до 11000).
Я проверял все работает
Может кто то из форумчан разбирающихся в программизме, заинтересуется в этом и разовьет тему.

#needs Python 2.x

import string
import binascii
import sys
import os
import struct

#cas_01.cas to cas_10.cas

DICE="\xCE\xD1\xB2\x0F"
cat=open("cas.cat","rb")
def readcat(cat):
    if cat.read(16)!="NyanNyanNyanNyan":
        print "error with header"
        return

    #get file length
    cat.seek(0,2)
    catlength=cat.tell()
    cat.seek(16)

    
    dicecount=0 #keep track of the total number of extracted files to print it later
    while cat.tell()<catlength:
        #do the cat
        sha1=binascii.hexlify(cat.read(20))
        fileoffset=struct.unpack("<l",cat.read(4))[0]
        filesize=struct.unpack("<l",cat.read(4))[0]
        casfilenum=str(struct.unpack("<l",cat.read(4))[0])
        if len(casfilenum)==1:
            casfilenum="0"+casfilenum

        #do the cas
        cas=open("cas_"+casfilenum+".cas","rb")
        cas.seek(fileoffset)
        
        if cas.read(4)==DICE: ##CONSIDER MY FAVOURITE FILE TYPE ONLY
            dicecount+=1
            if dicecount%1000==0:
                print dicecount

            #find the paths in the middle of the file and make a list out of them
            pathpos=fileoffset+struct.unpack("l",cas.read(4))[0]
            cas.seek(28,1)
            pathlen=struct.unpack("<l",cas.read(4))[0]
            cas.seek(pathpos)
            paths=cas.read(pathlen)

            lastbytes=paths[-16:][::-1]
            i=0
            try:
                while lastbytes[i]=="\x00":
                    i+=1
            except:
                i=16
            pathlist=string.split(paths[:-i],"\x00")

            #find a genuine path; the first string with two slashes or more <img src='http://www.extractor.ru/ipb/public/style_emoticons/<#EMO_DIR#>/smile.gif' class='bbc_emoticon' alt=':)' />
            path=""
            pathcount=0
            for i in pathlist:
                if string.count(i,"/")>=2:
                    path=i
                    break
                
            #just in case
            if path=="":
                for i in pathlist:
                    if string.count(i,"/")==1:
                        path=i
                        break
            if path=="":
                path=pathlist[0]

            
            cas.seek(fileoffset)
            #make the folders
            try:
                separator=path.rfind("/")
                if not os.path.isdir("safe/"+path[:separator]):
                    os.makedirs("safe/"+path[:separator])
            except:
                print "error with folder creation"
                debug=open("safe/debugfile "+sha1,"wb")
                debug.write(cas.read(filesize))
                debug.close()

            #write the files
            try:
                out=open("safe/"+path+" "+sha1,"wb")
                out.write(cas.read(filesize))
                out.close()
            except:
                print "error with file creation"
                debug=open("safe/debugfile "+sha1,"wb")
                debug.write(cas.read(filesize))
                debug.close()
                
        cas.close()
    print "files extracted: "+str(dicecount)
    

readcat(cat)


cat.close()
print "done"

import string
import binascii
import sys
import os
import struct


def readcat(cat):
    if cat.read(16)!="NyanNyanNyanNyan":
        print "error with header"
        return
    #get file length
    cat.seek(0,2)
    catlength=cat.tell()
    cat.seek(16)

    
    dicecount=0 #keep track of the total number of extracted files to print it later
    while cat.tell()<catlength:
        #do the cat
        sha1true=cat.read(20)
        sha1=binascii.hexlify(sha1true)
        fileoffset=struct.unpack("<l",cat.read(4))[0]
        filesize=struct.unpack("<l",cat.read(4))[0]
        casfilenum=str(struct.unpack("<l",cat.read(4))[0])
        if len(casfilenum)==1:
            casfilenum="0"+casfilenum

        #do the cas
        cas=open("cas_"+casfilenum+".cas","rb")
        cas.seek(fileoffset)
        
        if cas.read(4)==DICE: ##CONSIDER MY FAVOURITE FILE TYPE ONLY
            dicecount+=1
            if dicecount%1000==0:
                print dicecount    
            #find the paths in the middle of the file and make a list out of them
            pathpos=fileoffset+struct.unpack("l",cas.read(4))[0]
            cas.seek(28,1)
            pathlen=struct.unpack("<l",cas.read(4))[0]
            cas.seek(pathpos)
            pathlist=str.split(cas.read(pathlen),"\x00")
            while len(pathlist[-1])==0:
                pathlist.pop()

            pathlist.reverse() #yup
            path=""
            for path2 in pathlist:
                if str.count(path2,"/")>=2:
                    path=path2
                    break
            if path=="":
                for path2 in pathlist:
                    if string.count(path2,"/")==1:
                        path=path2
                        break
            if path=="":
                path=pathlist[-1]
 
            cas.seek(fileoffset)
            #make the folders
            try:
                separator=path.rfind("/")
                if not os.path.isdir("safe2/"+path[:separator]):
                    os.makedirs("safe2/"+path[:separator])
            except:
                print "Error with folder creation, file saved in debug folder instead"
                if not os.path.isdir("safe2/debug/"):
                    os.makedirs("safe2/debug/")
                debug=open("safe2/debug/file "+sha1,"wb")
                debug.write(cas.read(filesize))
                debug.close()
                continue
            #write the files
            try:
                out=open("safe2/"+path+" "+sha1,"wb")
                out.write(cas.read(filesize))
                out.close()
            except:
                print "Error with file creation, file put in debug folder instead"
                if not os.path.isdir("safe2/debug/"):
                    os.makedirs("safe2/debug/")
                debug=open("safe2/debug/file "+sha1,"wb")
                debug.write(cas.read(filesize))
                debug.close()
                
        cas.close()
    print "Total files extracted: "+str(dicecount)
    

DICE="\xCE\xD1\xB2\x0F"
cat=open("cas.cat","rb")
readcat(cat)
cat.close()

Сообщение отредактировал sterh: 26 March 2012 - 07:48


#8 Elephant1980

Elephant1980

    Рядовой

  • Пользователи
  • 1 сообщений

Отправлено 20 July 2013 - 07:07

Доброго времени суток, господа!Вопрос такой волнует очень давно меня-возможно ли извлечение ресурсов из игры Battlefield 3?Конкретно интересуют звуки, озвучка персонажей, озвучка техники.Облазил кучу форумов, но максимум что предлагают-записи звуков непосредственно с игры, но качество там, понятное дело, отвратительное...Хотелось бы узнать,есть ли какой нить способ извлечения?Буду рад любой информации.Заранее спасибо.