Gua sobre cmo modear la Demo, katalambda (katkiller para los viejos amigos xD).
Antes que nada quiero decir que no me hago responsable de los pasos a seguir por los que sigan este tutorial, hganlo bajo su propio riesgo, responder a las dudas que tengan pero bajo ningn concepto asumir las responsabilidades de lo que hagan con sus archivos.
Es sumamente recomendable que hagan una copia de la carpeta Data la cual es con la que vamos a trabajar y se encuentra en:
Steam/Steammapps/common/empire total war demo/data.
Antes que nada nos bajaremos el Python, la versin 3.1, si usas Vista es la de 86x:
http://www.python.org/download/releases/3.0.1/
Ok, una vez instalado vamos a Inicio-Todos los Programas-Python-IDLE (PYTHON GUIDE), lo abrimos.
Una vez en Python le damos a File/New Window y se nos abrir otra ventanida as:
Una vez abierta la nueva ventana, dentro copiaremos esto tal cual, copia y pega de aqu a ah:
import struct, os, sys, re
# For easy file reading and writing interactions
def readLong(fhandle):
return struct.unpack('l', fhandle.read(4))[0]
def readShort(fhandle):
return struct.unpack('h', fhandle.read(2))[0]
def readByte(fhandle):
return struct.unpack('B', fhandle.read(1))[0]
def readBool(fhandle):
val = fhandle.read(1)
if val == "00":
return False
else:
return True
def writeLong(fhandle, value):
fhandle.write(struct.pack('l',value))
def writeShort(fhandle, value):
fhandle.write(struct.pack('h',value))
def writeByte(fhandle, value):
fhandle.write(struct.pack('B',value))
def writeBool(fhandle, value):
if value:
fhandle.write('\x01')
else:
fhandle.write('\x00')
def removeDir(path):
# remove all files in a folder
if not (os.path.isdir(path)):
return True
files = os.listdir(path)
for x in files:
fullpath=os.path.join(path, x)
if os.path.isfile(fullpath):
os.remove(fullpath)
elif os.path.isdir(fullpath):
removeDir(fullpath)
os.rmdir(path)
def parseArgs(args):
pack = packFile('demo1.pack','unpacked')
# create argument tree
argtree = []
for arg in args[1:]:
if arg.startswith('-'):
argtree.append([arg,[]])
else:
argtree[-1][1].append(arg)
# wander the tree, top level always has hyphenated arguments
for arg in argtree:
# case 1: list
if arg[0] == '-l':
if len(arg[1]) > 0:
for file in arg[1]:
pack.printEyeCandy(str(file))
else:
pack.printEyeCandy('./list.txt')
# case 2: unpack
elif arg[0] == '-u':
for file in arg[1]:
if file == 'all':
for i in range(len(pack.files)):
pack.exportFile(i)
else:
pack.exportFile(file)
# case 3: unpack (regexp)
elif arg[0] == '-ur':
for file in arg[1]:
pack.exportFile(file, True)
# case 4: change pack
elif arg[0] == '-p':
for file in arg[1]:
print()
print('Changing pack to '+file)
print()
pack.newPack(file,pack.outputdir)
# case 5: change output directory
elif arg[0] == '-o':
for file in arg[1]:
print()
print('Changing output directory to '+file)
print()
pack.changeOutputDir(file)
class packFile:
def __init__(self, path='', outputdir=None):
self.handle = None
if outputdir:
removeDir(outputdir)
self.newPack(path,outputdir)
def newPack(self,path,outputdir=None):
# safely open new pack
if self.handle:
self.handle.close()
self.handle = None
self.files = []
self.numFiles = 0
self.arr = 0
self.outputdir = outputdir
self.defLength = 0
self.path = path
self.readPackDefinition()
def changeOutputDir(self,path):
self.outputdir = path
if self.outputdir != None:
removeDir(self.outputdir)
def packOpen(self):
if not self.handle:
self.handle = open(self.path,"rb")
return self.handle
def packClose(self):
self.handle.close()
def readPackDefinition(self):
pack = self.packOpen()
# skip empty bytes and stuff at the start
pack.seek(16)
self.defLength += 16
# read number of files
self.numFiles = readLong(pack)
self.defLength += 4
# read ??
self.arr = readLong(pack)
self.defLength += 4
# store the offset of a certain file
offset = 0
# read file metadata
for i in range(self.numFiles):
# read length of file
length = readLong(pack)
self.defLength += 4
# read file name
char = ''
filename = ''
while char != b'\x00':
char = pack.read(1)
if (char != b'\x00'):
filename += char.decode()
self.defLength += 1
self.files.append((filename,length,offset))
offset += length
def exportFile(self, arg, regexp = False):
try:
arg = int(arg)
# option a: arg is an index
list = [self.files[arg]]
except:
# option b: arg is a string
if regexp:
list = filter(lambda x: re.search(str(arg),x[0]),self.files)
else:
list = filter(lambda x: arg in x[0],self.files)
for (path,length,offset) in list:
print('Exporting '+path+', length: '+str(length)+', at offset: '+str(offset))
# create output directory
dir = os.path.split(os.path.join(self.outputdir,path))[0]
if not os.path.isdir(dir):
os.makedirs(dir)
output = open(os.path.join(self.outputdir,path),'wb')
# open pack and go to offset
pack = self.packOpen()
pack.seek(self.defLength+offset)
# copy content
i = 0
# read MB-sized chunks as long as possible
j = length//(2**20)
while i < j:
output.write(pack.read(2**20))
i+=1
i = 0
j = (length%(2**20))//(2**10)
# read KB-sized chunks
while i < j:
output.write(pack.read(2**10))
i+=1
i = 0
j = length%(2**10)
# read byte-sized chunks
while i < j:
output.write(pack.read(1))
i+=1
output.close()
return True
def printEyeCandy(self, outfile):
output = open(outfile,'w')
for (path,length,offset) in self.files:
output.write(str(path)+'\r\n')
output.close()
# main
parseArgs(sys.argv)
Una vez hecho esto le dan a File/Save as y le ponen este nombre emp_unpacker.py y lo guardan en la carpeta Steam/Steammapps/common/empire total war demo/data
Ok, ahora cerramos el python, la dos ventanas y vamos al CMD, si tienes XP, yo no uso XP, vas a inicio ejecutar CMD y tecleas la ruta desde C:Donde quieras que tengas los programas\steam\steamapps\common\empire total war demo\data y listo, si tienes VISTA como yo vete a la carpeta Data y con el shift presionado le das al botn derecho y le das donde pone "abrir ventana de comandos aqu" no hace falta que pongas nada ya que tendrs la ruta puesta.
Bien, ahora aqu introduces lo siguiente tras toda esa linea de comandos:
emp_unpacker.py -u all
Ahora deberas ver como se descomprimen una serie de elementos que van directamente a tu carpeta Data y se almacenan en una carpeta llamada unpacked, de aqu copias, copias no cortas que sino se va todo a la M, copias y pegas todo su contenido en la carpeta Data y le dices que s a reemplazar todo.
Ahora en la carpeta Data mueve el archivo demo1 a donde te d la gana pero qutalo de la carpeta Data o no funcionarn los cambios que hagas para las unidades.
Y tachn, ya tienes todos los archivos a modear ah mismo.
Ahora te preguntars cmo modeas las unidades o los barcos.
Pues aqu est la respuesta:
Carpeta Data/Scenarios y vamos a coger por ejemplo Battle_of_lagos como ejemplo, abrimos ese archivo de extensin XML con el bloc de notas.
Yo he creado el First Rate Ship o navo de primera lnea "Canarias", el mejor sitio del mundo

P xD, es simple, con fijarse en los dems comandos de la lista y copiando y pegando se crean cuantos barcos quieras, de primera, segunda, tercera o cuarta lnea, solo se ha de cambiar las coordenadas para que no estn juntos en la batalla que si tropiezan sufren daos.
No se puede cambiar la nacionalidad de los barcos, son britnicos y as han de permanecer porque sino el juego se cuelga, seguro.
Donde pone "<ship_experience level="X"/>" el valor X podemos poner entre 0 y 9, esa ser la experiencia de nuestro navo.
Para las tropas? pues lo mismo, buscamos la batalla de Brandywine y vemos las tropas, el nmero de tropas est en el valor <unit unit_category="infantry" num_soldiers="1200" script_name="britain_euro_grenadiers_bearskin"> 1200 es el valor que le he puesto yo y esto sera la imagen en el juego de mi pequeo ejrcito, por cierto son mucho mayores que en los anteriores Total War ya que parece incluso que no hay lmite, aunque hasta 10.000 he llegado yo.
Aqu tienen a mis fusileros Britnicos o ms bien una Horda:
