Civilization и Total War

 

Имя
Пароль  
Забыли пароль?
Регистрация


CIVru.com / Medieval 2 Total War / Моддинг в Empire: Total War
Версия для печати . Вверх
Автор Сообщение
Haktarus
Участник


Репутация: 1024(???)
# Дата: 27 Фев 2009 06:56:26 Поправил: Haktarus Цитата

Начало моддинга в Empire: Total War

Статья от Лиса из Тарговиска

Распаковщик от Alpaca и Sinople:
Распаковать удалось с легкостью, на скрине трапперы сражаются на стороне британцев (также известных, как лоялисты) :

Ссылка на распаковщик
Открывать файл архиватором (Лис: у меня винрар 3.5, открыл без труда)
Пользоваться:
1.Перенести распаковщик в data папку, запустить .bat файл.
2. Все распакованное будет в папке unpacked
*Требуется Python (Лис: библиотека языка, можно взять здесь )

Провел тест на работоспособность.
Необходимо:
1. Установить Python. Ссылка выше.
2. Перенести файлы распаковщика по адресу (у меня) C:\Program Files\Steam\steamapps\common\empire total war demo\data
3. Открыть файл emp_unpacker.py, кликнув на него правой кнопкой мыши и выбрав Edit with IDLE.
Откроется два окна. Python Shell не трогайте. Из второго окна стираете все, заменив на:
[spoiler]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)
[/spoiler]
4. Сохраняете, запускаете бат-файл emp_unpacker.py -u all.bat

После распаковки не забудьте переименовать demo1.pack в demo1.pack_backup, затем перенести файлы в корневую директорию, здесь вы уже сможете их модифицировать.

Небольшие видоизменения игры:

Пехота стреляет тремя рядами:

Найдите юнита, который вы хотите изменить
<unit unit_category="infantry" num_soldiers="80" script_name="britain_euro_line_infantry_01">
<unit_type type="euro_line_infantry_britain"/>
<position x="-108.22" y="501.29"/>
<orientation radians="2.66"/>
<width metres="29.58"/>
<unit_capabilities>
<firing_drill>fire_volley</firing_drill>

Измените на:
<unit unit_category="infantry" num_soldiers="80" script_name="britain_euro_line_infantry_01">
<unit_type type="euro_line_infantry_britain"/>
<position x="-108.22" y="501.29"/>
<orientation radians="2.66"/>
<width metres="29.58"/>
<unit_capabilities>
<firing_drill>rank_fire</firing_drill>

У вас не хватает двух букв, так как rank_fire короче, чем fire_volley. Рекомендуют добавить две буквы к имени генерала. (Лис: как это сделать вы поймете далее)

Изменить количество солдат в отряде:
Найти:
<unit unit_category="infantry" num_soldiers="45" script_name="britain_euro_grenadiers_bearskin">
и заменить на
<unit unit_category="infantry" num_soldiers="145" script_name="britain_euro_grenadiers_bearskin">

Затем найти:
<general>
<name>William Howe</name>

и заменить на
<general>
<name>William How</name>


Опыт отряда:
Найти:
<unit unit_category="infantry" num_soldiers="80" script_name="britain_euro_line_infantry_01">
<unit_type type="euro_line_infantry_britain"/>
<position x="-108.22" y="501.29"/>
<orientation radians="2.66"/>
<width metres="29.58"/>
<unit_capabilities>
<firing_drill>rank_fire</firing_drill>
<special_ability>square_formation</special_ability>
<bayonet_type>ring_bayonets</bayonet_type>
</unit_capabilities>
<unit_experience level="0"/>


Ноль изменить на 3. Никаких иных изменений не требуется.

Добавление кораблей в игру:
Во втором посте показывают добавление кораблей в игру. Делается это в файле battle_of_lagos.xml
Мануала нет, видимо это делается элементарно копи-пастом.
<faction>britain</faction>
<deployment_area>
<centre x="0.0" y="0.0"/>
<width metres="2000.0"/>
<height metres="2000.0"/>
<orientation radians="0"/>
</deployment_area>
<camera_start_position x="-122" y="33.2" z="566.6" />
<camera_target_position x="-156" y="-31.7" z="384.4" />


Со всеми вопросами по этому посту сюда: Моддинг и Тюнинг для ETW, Делимся опытом, туторами, советами

Другиии инструкции по моддингу Empire: Total War: Пособие для моддера ETW, Инструкции для начинающего моддера



Упрощённый вариант распаковки архивов pack

1. Скачиваем программу Python - Скачать
2. Скачиваем архив распаковщика - Скачать
3. Распаковываем архив распаковщика, и копируем из него файлы emp_unpacker.py и emp_unpacker.py -u all.bat в папку C:\Program Files\Steam\steamapps\common\empire total war demo\data
4. Запускаем файл emp_unpacker.py -u all.bat, ждём распаковки. Распакованные файлы находяться в папке unpacked

Как распаковать другие файлы с расширением .pack?

1. Повторяем 1-й, 2-й и 3-й пункт инструкции Упрощённый вариант распаковки архивов pack
2. Открываем файл emp_unpacker.py с помощью Блокнота. Ищём demo1. Заменяем эту строку на demo2, demo3 или другой пак, который вам надо распаковать. Запускаем emp_unpacker.py -u all.bat, ждём распаковки.
Небольшой нюанс - перед тем как распаковывать, если вы уже распаковали demo1.pack, то папку unpacked переименуйте например в unpacked1

Со всеми вопросами по этому посту сюда: Моддинг и Тюнинг для ETW, Делимся опытом, туторами, советами

Другиии инструкции по моддингу Empire: Total War: Пособие для моддера ETW, Инструкции для начинающего моддера

Haktarus
Участник


Репутация: 1024(???)
# Дата: 11 Мар 2009 01:41:48 Цитата

===================================
Небольшой моддинг в Empire Total War:
===================================

Убираем туман войны:

1. Идем по пути ..\data\campaigns\main\scripting.lua
2. Делаем резервную копию scripting.lua
3. Открываем scripting.lua
4. Ищем в нём :
local function OnWorldCreated()

    scripting.game_interface:technology_osmosis_for_playables_enable_culture("european"Подмигивание

    scripting.game_interface:technology_osmosis_for_playables_enable_all()

5. После строчки:
scripting.game_interface:technology_osmosis_for_playables_enable_all()
Добавляем:
scripting.game_interface:show_shroud(false)
===================================

Изменяем число солдат в отряде:

1. Заходим в директорию C:\Documents and Settings\Имя юзера\Application Data\The Creative Assembly\Empire\scripts\, открываем Блокнотом файл preferences.empire_script.txt
2. Найти текст:
campaign_unit_multiplier 1; # campaign_unit_multiplier <float>, Set default unit multiplier for campaign #
Цифра 1 в строке campaign_unit_multiplier 1 соответствует 160 юнитам в отряде.
Поставив вместо единицы двойку, мы получим 320 юнитов в отряде, четвёрку - 640 юнитов, пятёрку -800 юнитов, и так далее.
===================================

Играть за все фракции:

Тутор большой, поэтому ссылка на него - http://imperiall.1bb.ru/index.php?showtopic=3888

===================================
Другие инструкции по моддингу Empire Total War - http://imperiall.1bb.ru/index.php?showtopic=3805
===================================

fantakt
Участник



Репутация: 1261(???)

# Дата: 18 Мар 2009 18:06:35 Цитата

В компании "Путь к независимости" как пройти второй эпизод? Вроде все сделал, форт захватил, Вашингтон уже от старости помер, а ничего не происходит

oottoo
Участник


Репутация: 503(???)
# Дата: 11 Июл 2009 12:36:20 Цитата

Какой интерес упрощать игру с помощью мода? Непонимаю. Пройди на hardе и скажи спасибо разработчикам. Но зачем упрощать?


fantakt, я ваще завис на взятии французкого форта в обучающей кампании. Игрушка явно недоработана. В ненужном месте бывают непонятные зависания. Хоть бы по графике и т. п. зависания, а то на ровном месте виснет на полминуты. Ждём официальные дополнения.

Версия для печати . Вверх

ОСТАВЛЯТЬ СООБЩЕНИЯ МОГУТ ТОЛЬКО ЗАРЕГИСТРИРОВАННЫЕ ПОЛЬЗОВАТЕЛИ!

Администрация форума: editors@civru.com
Rambler's Top100
XML [?]