您的位置:首页 > 其它

机甲世纪II 资源文件分析

2012-08-16 11:47 176 查看
机甲世纪一些资源所在目录:

\机甲世纪Ⅱ\AOA\RESOURCE



其中Fonts.pcg文件应该是空数据文件,只包含文件头数据,所以可以结合其他文件进行比较分析,这里比较Effects.pcg

Fonts.pcg



Effects.pcg






代码:

#! /usr/bin/env python
# -*- coding: gb2312 -*-
#
#
#
# Usage:
#   python <fileName> <资源文件> <目标文件夹>
#
# example:
#	python extractor.py UI.pcg temp
import sys, os
import os.path
import binascii

#转换小端模式 int
def lETransformInt(hexString):
sbr=""
j=0
for i in range(len(hexString)-1,-1,-1):
sbr = sbr + hexString[i]
return int(binascii.b2a_hex(sbr), 16)

#转换小端模式 String
def lETransformStr(hexString):
sbr=""
j=0
for i in range(len(hexString)-1,-1,-1):
sbr = sbr + hexString[i]
return binascii.b2a_hex(sbr)

#创建目录 并构造文件路径
def getRootDir(path):
fullPath = os.getcwd() + "\\"+ sys.argv[2] +"\\"
fileName = os.path.basename(path)
reFilePath = path.split(fileName)[0]

fullPath = fullPath + reFilePath
if not os.path.isdir(fullPath):
os.makedirs(fullPath)

return fullPath + fileName

#按路径写入文件
def wtiteFileWithPathAndHex(path, HexStr):
fileName = getRootDir(path)
hexF = open(fileName, "wb")
hexF.write(HexStr)
hexF.close()

if len(sys.argv) != 3 :
print "Usage:\n\tpython <fileName> <资源文件> <目标文件夹> \nexample:\n\tpython extractor.py The_Spell.vst temp "

else:
f = open(sys.argv[1], "rb")
#17 定位到文件个数段
f.seek(17, 0)

#读取文件数目
fileCount = lETransformInt(f.read(4))
globalOffset = 61
print fileCount
fileNum = 0
while fileNum < fileCount:
fileNum = fileNum + 1

#定位到偏移地址
f.seek(globalOffset, 0)
#print "--------------" + str(globalOffset)

#读取文件名长度
filePathLength = lETransformInt(f.read(2))
#print filePathLength

#读取文件路径
filePath = f.read(filePathLength)
print "path:" + binascii.b2a_hex(filePath) + "\n" +filePath

#读取偏移长度 文件大小
offsetAdd = lETransformInt(f.read(4))
#print "offsetAdd:" + str(offsetAdd)

#移过32字节
f.seek(32, 1)

#读取偏移地址 文件起始地址
originAdd = lETransformInt(f.read(4))
#print "originAdd:" + str(originAdd)

#按偏移地址读取
f.seek(originAdd, 0)
#获取偏移的长度的数据
fileStr = f.read(offsetAdd)

wtiteFileWithPathAndHex(filePath, fileStr)

#计算文件索引位置
globalOffset = globalOffset + 118 + filePathLength
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: