1) Описываемое здесь - инструкции по «начальному» моддингу игры, однако, освоив их, путём экспериментов можно додуматься до собственных оригинальных модов.
2) Автор текста не несёт ответственности за играбельность игры, состояние её файлов, состояние вашего компьютера и температуру его жёсткого диска после моддинга. А также автор не несёт ответственность за многие другие факторы и обстоятельства.
3) Кому неохота проделывать все манипуляции самостоятельно, сразу идём в одноимённый раздел и там качаем файл.
Что будем моддить: игру Dead Island (ну и Riptide заодно).
Что нам понадобится для этого: установленная игра и её файлы, а также хотя бы начальное знание английского (хотя, внимательно всё читая, можно обойтись и без него). Соответственно, понимание HTML будет плюсом, а понимание основ программирования - огромным бонусом, который, возможно, позволит вам залезть в познании параметров игры даже дальше меня.
Игра Dead Island создана на движке Chrome Engine 6. Большинство (если не все) игровые параметры окружающего игрока мира в нём задаются в текстовых файлах, которые запакованы в архивах игры. Поэтому игру достаточно легко изменить под свои потребности. Не знаю, может ли это считаться моддингом, т.к. не вносит в игру новых объектов, карт и врагов. Но хакингом - вполне.
Благодаря своему движку и структуре DI легко поддаётся моддингу. Вот лишь приблизительный перечень того, каким образом можно взломать и изменить параметры игры:
бесконечные патроны, предметы, аптечки, алкоголь / деньги / вечное оружие / высота прыжка/ всегда криты / максимальное количество патронов и т.д.
Рассмотрим, как можно изменить игру только путём редактирования текстовых файлов, без баловства с редактором памяти (Cheat Engine и т.д.)
Как будем изменять и редактировать.
После установки игры идём в директории
Для первой части - директория [буква жёсткого диска, где установлена игра] Dead Island\DI\
Для Riptide - [буква диска]:\GAMES\Dead Island - Riptide\DIR
То же самое для изданий Definitive Edition:
[]:\GAMES\Dead Island Riptide - Definitive Edition\DIR
В этих директориях находим файл data0.pak. Он может быть открыт архиватором WinRar.
ВАЖНО.
Перед тем, как вносить в игру какие-либо изменения, лучше всего сделать бэкап всего файла data0.pak в отдельной папке. Этот файл представляет собой один архив с указанием массы отдельных параметров.
Поэтому в дальнейшем, если что-то не заработает, то иногда бывает легче заменить весь файл, чем менять по одному текстовому документу.
ВНИМАНИЕ! В файле data0.pak есть 2 нужных нам файла default_levels.xml.
Один - в корне папки data, второй - в папке skills.
Как правило, моддеры утверждают, что нужен именно второй файл, т.е. Путь должен быть такой:
Data0.pak\data\skills
Но, скорее всего, на моддинг игры настоящее положение этого файла не влияет. Ну или экспериментируйте сами. Я обнаружил, что в Definitive Edition легко можно менять параметры и того, и другого файла, но, например, PenaltyOnDeath=0 работает (у меня) только в корне.
Итак, берём файл data0.pak и внутри него находим файл default_lexels.xml, а также файл inventory_gen.scr.
Оба файла можно открыть в блокноте, WordPad, notepad++ и других текстовых редакторах.
Именно этот файл отвечает за параметры и показатели игрока как объекта внутри игры. И он поможет нам открыть много любопытных возможностей.
Бесконечные патроны (непроверено)
В файле inventory_gen.scr меняем число в строчке:
AmmoCount(9);
на
AmmoCount(-1);
чтобы изменить количество патронов для конкретного оружия. Соответственно, для всех видов оружия цифра должна быть заменена на -1
Здесь 9 означает количество патронов в конкретном оружии.
Вечное оружие (непроверено)
В файлах
inventory.scr
inventory_gen.scr
есть строчка
Condition(34);
также меняем цифру:
Condition(-1);
Всегда криты, 100% шанс на критические удары.
В тех же файлах
inventory.scr
inventory_gen.scr
есть строчка
CriticalProb(0.01);
в ней меняем цифры на CriticalProb(1.0);
[единичка означает 100% шанс на криты. Более того, если у оружия есть модификация на специальный эффект от ударов (яд, электричество), то этот эффект будет срабатывать при каждом ударе.]
А вот дальше начинаются проверенные и уже более интересные методы, так как начинаем работать с файлом default_levels.xml.
Высота прыжка (проверено).
Со слишком большой высоты герой падает и погибает, поэтому не советовал бы ставить более 50 - 100.
В файле default_levels.xml есть строчки
<prop n="JumpMaxHeight" v="0.85"/>
<prop n="JumpMinHeight" v="0.85"/>
Эти значения можно менять по своему желанию. (У меня 3.5, в результате персонаж может одним прыжком запрыгнуть на трейлер / хижину и т.д.)
Любопытно, что файл default_lexels.xml находится в папке вместе с файлами скиллов всех остальных героев. Там же (во всяком случае, в редакции Def.Edition) находится файл akuro_levels.xml. Возможно, разработчики планировали ввести в игру ещё одного персонажа? И это точно не Райдер Уайт, т.к. в той же папке есть файл, относящийся к нему - ryder_skills.xml.
Изменяем файл default_levels.xml
<prop n="PenaltyOnDeath" v="1"/> - Установите 0 вместо единички, чтобы не терять деньги при гибели персонажа. (у меня в корневой папке работало)
В данном случае это триггер "1= вкл, 0 = выкл" и половинные или десятичные значения не работают и не снижают количество денег. Однако в дальнейшем мы увидим, что некоторые значения можно менять от 0.1 до 1.
<prop n="DmgResAfterDeathDur" v= "5.0"/> - Как долго персонаж остаётся неуязвимым после воскрешения.
<prop n="MoveWhenCarryMaxSpeedFactor" v="0.7"/> - Максимальная скорость, с какой ваш персонаж может передвигаться при переносе объектов (ящик, баллон и т.д.).
<prop n="MoveWhenCarryMinSpeedFactor" v="0.2"/> - Минимальная ограничивающая скорость, с какой ваш персонаж может передвигаться при переносе объектов. Это значение также может быть изменено от 0.1 до 0.9.
<prop n="ThrowMaxDist" v="900.0"/> - Максимальная дистанция для метания предметов.
<prop n="FistsWpnDurabilityLoss" v="1.0"/> - Поставить на 0.0, чтобы кастеты и прочее никогда не ломались. (Непроверено).
<prop n="BSHealOnHitChance" v="0.0"/> - поставить единичку, чтобы получить 100% шанс исцеления при ударе героя по врагу.
[Реген, или восстановление здоровья, мне так и не удалось получить. Но возможно, что версия игры должна быть лицензионной. А может, это никак не связано].
<prop n="HealthRegenerationStartTime" v="3.0"/> - Как много времени пройдёт, прежде чем здоровье персонажа начнёт восстанавливаться.
<prop n="HealthRegenerationMaxLevel" v="25.0"/> - Неизвестно (возможно, максимальное значение, на которое здоровье может быть вылечено).
<prop n="HealthRegenerationSpeedInStand" v="10.0"/> - Значение регена, пока персонаж стоит на месте
<prop n="HealthRegenerationSpeedInWalk" v="10.0"/> - Значение регена при обычном шаге
<prop n="HealthRegenerationSpeedInCrounch" v="10.0"/> - то же, пока персонаж присел
<prop n="HealthRegenerationSpeedInCrounchWalk" v="10.0"/> - то же, пока персонаж ползает вприсядку
<prop n="HealthRegenerationSpeedInSprint" v="10.0"/> - значение регена при беге
<prop n="HealthRegenerationSpeedInKnockDown" v="10.0"/> - при нокауте, пока герой лежит на полу и приходит в себя.
Кулаки
<prop n="FistsAnalogFight" v="1"/> - Для кастетов и "кулачного" оружия может быть использовано аналоговое управление. (Непроверено. Однако данный триггер может быть только 1 или 0, в то время как для различных Mul (видимо от multiplyer) значение можно пробовать выставлять также от 0.1 до 0.9).
<prop n="FistsDamageMul" v="0"/> - увеличитель значения повреждений для кулачного типа оружия.
<prop n="FistsForceMul" v="0"/> - увеличитель силы для того же.
<prop n="FistsAttackSpeedMul" v="0"/> - увеличитель скорости.
<prop n="FistsCriticalChance" v="0"/> - уровень крита при использовании "кулачного" оружия.
<prop n="FistsCriticalDmgMul" v="0"/> - отвечает за криты при использовании "кулачного" оружия.
<prop n="FistsCritSevereLimbProb" v="0.2"/> - отвечает за вероятность отрубить конечности врагов при критах "кулаками".
<prop n="FistsKillExperienceBonus" v="0"/> - увеличитель опыта при убийстве кулаками.
<prop n="LowHealthDamageMul" v="0"/> - отвечает за уровень "входящего" урона игроку, когда здоровье низкое
<prop n="LowHealthForceMul" v="0"/> - уровень силы игрока при низком здоровье.
Оружие ближнего боя
<prop n="MeeleDamageMul" v="0"/> - увеличитель дамага при использовании оружия ближнего боя.
<prop n="MeeleForceMul" v="0"/> - увеличитель силы б/б.
<prop n="MeeleAttackSpeedMul" v="0"/> - увеличитель скорости атаки б/б.
<prop n="BreakDoorEffectivens" v="0"/> - Уровень эффективности выбивания дверей.
Тупое оружие
<prop n="BluntDamageMul" v="0"/> - увеличитель дамага.
<prop n="BluntForceMul" v="0"/> - ув. силы.
<prop n="BluntWpnDurabilityLoss" v="1.0"/> - Уровень, при котором тупое оружие теряет прочность (0.0=бесконечная прочность, непроверено)
<prop n="BluntCriticalChance" v="0"/> - увеличитель шанса на криты.
<prop n="BluntCriticalDmgMul" v="0"/> - увеличитель собственно критического дамага
<prop n="BluntCritSevereLimbProb" v="0.2"/> - вероятность отрубать конечности при критах тупым оружием.
<prop n="BluntAttackSpeedMul" v="0"/> - скорость атаки.
<prop n="BluntKillExperienceBonus" v="0"/> - увеличитель бонусного опыта для т/о.
Холодное (острое) оружие. Всё то же самое, что и для тупого.
<prop n="CutDamageMul" v="0"/> - увеличитель дамага.
<prop n="CutForceMul" v="0"/> - силы.
<prop n="CutWpnDurabilityLoss" v="1.0"/> - уровень прочности. (0.0=вечное, непроверено)
<prop n="CutCriticalChance" v="0"/> - увеличитель шанса на криты.
<prop n="CutCriticalDmgMul" v="0"/> - увеличитель собственно критического дамага
<prop n="CutCritSevereLimbProb" v="0.2"/> - вероятность отрубать конечности при критах холодным оружием.
<prop n="CutAttackSpeedMul" v="0"/> - скорость атаки.
<prop n="CutKillExperienceBonus" v="0"/> - увеличитель бонусного опыта для х/о.
Метательное (дистанционное) оружие. Почти всё то же самое, что и для тупого, и острого.
Но есть и отличия.
<prop n="RangedDamageMul" v="0"/> - увеличитель дамага.
<prop n="RangedForceMul" v="0"/> - силы.
<prop n="RangedAccuracy" v="0"/> - отвечает за уровень аккуратности (меткости) при метании ножей и прочего.
<prop n="RangedWpnDurabilityLoss" v="0.1"/> - не нужно изменять.
<prop n="RangedCriticalChance" v="0"/> - увеличитель шанса на криты.
<prop n="RangedCriticalDmgMul" v="0"/> - увеличитель собственно критического дамага
<prop n="RangedCritSevereLimbProb" v="0.2"/> - вероятность отрубать конечности при критах метательным (сам такого не видел, но скорее всего, такой эффект есть).
<prop n="RangedAttackSpeedMul" v="0"/> - скорость атаки метательным (тот же Rate of Fire).
<prop n="RangedKillExperienceBonus" v="0"/> - увеличитель бонусного опыта для метательных.
Практически те же самые параметры видим для огнестрела, что уже позволяет провести некоторые интересные эксперименты.
Различные параметры
<prop n="MedPackEffectivness" v="1"/> - уровень эффективности лечебных предметов
<prop n="CoopMedPackEffectivenss" v="1"/> - уровень эффективности лечения партнёра в коопе.
<prop n="InjectorDurationBonus" v="0"/> - как долго будет длиться бафф
(в данных значениях 1 скорее всего выступает как триггер, т.е. 0 будет означать нулевой эффект, 1 - то, что эффект вообще есть (непроверено)
<prop n="KillExperienceBonus" v="0"/> - количество опыта от убийств
<prop n="QuestExperienceBonus" v="0"/> - количество опыта от завершения квестов
<prop n="StompStaminaUsage" v="0.3"/> - сколько выносливости / стамины будет использовано при растаптывании башки зомбакам.
<prop n="StaminaRegeneration" v="0.3"/> - значение, при котором стамина начинает восстанавливаться.
Скорость передвижений
<prop n="MoveForwardMinSpeed" v="10"/> - минимальная скорость при движении персонажа вперёд
<prop n="MoveForwardMaxSpeed" v="350"/> - максимальная при обычном шаге вперёд
<prop n="MoveBackwardMinSpeed" v="10"/> - минимальный уровень скорости при движении назад
<prop n="MoveBackwardMaxSpeed" v="250"/> - насколько максимально быстро персонаж движется назад
<prop n="MoveStrafeMinSpeed" v="10"/> - минимальная скорость при стрейфах
<prop n="MoveStrafeMaxSpeed" v="250"/> - максимальная скорость при стрейфах
<prop n="MoveSprintSpeed" v="550"/> - скорость при беге
<prop n="MoveSprintStaminaConsumption" v="0.05"/> - сколько стамины используется при беге
<prop n="MoveAcceleration" v="700"/> - насколько быстро персонаж может ускориться до максималки
<prop n="MoveDeceleration" v="1000"/> - как быстро он может остановиться после того, как вы отпустите кнопку бега.
Похожие параметры относятся и к группам CrouchSpeed, и SwimSpeed, поэкспериментировав с которыми, можно заставить своего персонажа передвигаться в воде не хуже лодки.
У меня персонаж боком бегает быстрее, чем вперёд-назад...
<prop n="JumpStaminaCost" v="0.06"/> - сколько выносливости потребуется на прыжок
<prop n="JumpMaxHeight" v="85"/> - максимальная высота прыжка
<prop n="JumpMinHeight" v="85"/> - минимальная высота прыжка
При значениях выше 100 ваш персонаж начнёт получать повреждения при падении. Добиться того, чтобы эти повреждения исчезли, мне так и не удалось. Однако в некоторых модах это достигнуто иным подходом, и вы можете поэкспериментировать. Например, в ROY'S mod прыжок невероятно высокий, но здоровье у героя бесконечное, и гравитация выкручена "вверх" очень сильно. В результате можно запрыгнуть даже на крышу отеля и не получить повреждений при падении.
Я поставил значение MaxHeight 3.5, чтобы с разбегу запрыгивать на здания высотой в рост персонажа
<prop n="GrappleEscapeMul" v="2"/> - шанс вырваться из захвата врага
<prop n="EnemyGrabChance" v="1"/> - шанс врага зацапать вашего персонажа.
<prop n="WeightCanCarry" v="25.0"/> - максимальный вес объекта, который ваш персонаж может поднять (однако я не советовал бы вам поднимать машины... хотя, до них мы тоже дойдём).
Напоминаю, что данный мод работает
только для версии Riptide: Definitive Edition. Автор не несёт ответственности за работоспособность вашей игры после моддинга.
Если вам неохота изменять кучу параметров игры самостоятельно.
Если вас испугала возможная путаница с файлом default_lexels.xml...
Решение есть! Просто качаем
данный файл data0.pak, идём в директорию игры, создаём где-нибудь в сторонке папку-бэкап.
Туда на всякий случай копируем файл вашей игры с «чистыми» параметрами.
А потом заменяем его на модифицированный файл.
Профит!
Что осталось неизменённым:- персонаж по-прежнему получает урон от ударов зомби и от окружающей среды (падение с высоты, огонь и т.д.)
Что в моде:- отключены денежные штрафы при гибели персонажа.
- персонаж очень быстро разгоняется и бегает. Боком бегает даже быстрее, чем вперёд-назад, отчего становится можно не использовать машину.
- И лодку тоже, т.к. в воде персонаж бегает почти так же быстро, как и на земле.
- практически бесконечная стамина и дыхание.
- персонаж выше прыгает и способен без разбега запрыгнуть на высоту хижины/трейлера и т.д., а также почти разом запрыгнуть наверх лестницы или утёса.
Однако, обратите внимание, что повреждения при падении остались. Т.е. если персонаж с разбегу прыгнет с высоты (верхушки трейлера/ балкона и т.д.) и упадёт, он получит повреждения около 50% здоровья, а с большой высоты - погибнет.
- Большой урон от огнестрела и быстрая скорость перезарядки.
- персонаж очень быстро вышибает двери (должен с первого раза).
- должен быстрее вставать после того, как его сбили с ног.
Ну и пару мелочей:- машина стала чуть легче и быстрее «ворочается».
- больший обзор поворота головы при лазании по лестницам (к сожалению, сейчас не работает...).
Добавлено позже:Как сделать персонажа неуязвимым и прочие мелкие детали.
Внимание! Метод работал только у меня (на пиратской версии игры). У вас он по разным причинам может не сработать!
Находим default_levels прямо в корневой папке, т.е. путь должен быть такой
Data0.pak\default_levels.xml
В нём находим строчку
<prop n="MeeleDRPercent" v="0.5"/> и меняем значение на 9000.
После этого персонаж становится неуязвимым не только к ударам врагов, но и к падению с большой высоты.
За что эта строчка отвечает, я не рискну сказать. Теоретически, это процент "входящего" повреждения герою. Но почему тогда он должен достигать таких больших значений...?
В моде от CFW значение этого "пропа" выставлено на 9000, в моде от XxX на 999.
Соответственно, поменяв его значения, вы сможете добиться неуязвимости.
Поскольку я добивался отсутствия дамага от прыжков, то справедливо рассудил, что за повреждения окружающей среды должна отвечать вот эта строчка
<prop n="EnviromentalDRPercent" v="0.0"/>
Однако, к моему великому разочарованию, при значении 0.999 прыжок моментально убивает, а при значении 9000 повреждение от прыжка остаётся.
Если на вашей версии игры данный способ не сработает, напоминаю, что вы можете ещё попробовать поизменять этот же файл по пути Data0.pak\data\skills.
Различные параметры
Data0.pak\data\odephysics\walkfly
(а также файл playerph.scr)
строчка, которая скорее всего отвечает за максимальную скорость влезания по лестнице
MaxClimbSpeed(4)
строчка, которая должна отвечать за угол обзора при влезании
ClimbMaxLookAroundAngleDEG(280)
однако, с изменением этих строчек в конкретно моей игре ничего не менялось...
здесь же
ContactParams("Terrain")
{
Ignore(0)
если включить единичку, то персонаж будет проваливаться сквозь землю.
Data0.pak\data\odephysics\vehicle
файлы car.phx и cardi.phx
строчка
VehicleParams()
{
Mass(1000)
можно немного изменить вес машины, отчего она станет двигаться быстрее. В этом файле также заложена масса параметров относительно взаимодействия машины как объекта с окружающим миром. Так что ничего другого я бы вам не советовал менять.
Однако, я также убеждён, что где-то в файлах игры можно поменять скорость посадки в машину и скорость зажигания мотора...
Data0.pak\data\odephysics\vehicle
файл truckdi.phx
строчка
VehicleParams()
{
Mass(1500)
это масса грузовика, если немного уменьшить (до 1500 например), то он будет двигаться быстрее и станет чуть более поворотливым, сохранив убойную силу.
Дальше, начинается чистое теоретизирование и предположения. Ничего из этого не проверено на практике, если хотите экспериментировать - то делаете это на свой страх и риск. И автор не несёт ответственности за результаты экспериментов.
Лодка
(Data0.pak\data\odephysics\vehicle, файл
BoatParams()
{
Mass(770) - масса лодки, но в принципе менять её вряд ли имеет особый смысл, ну может уменьшить на 200.
MassShift([0.0, -0.5, 0.0]) - если поэкспериментировать с этими параметрами, может быть, инерция лодки будет меньше или больше, но это я уже не проверял.
Также, теоретически именно в этом файле можно заставить лодку не обращать внимания на столкновения с некоторыми объектами, просто выставив флаг Ignore(0) (вместо 0 = 1).
И первое, что приходит на ум -
ContactParams("SimpleObjects")
{
Ignore(0)
}
но это не проверено...
Лодка
Data0.pak\data\objects\vehicles\old_boat_a
файл old_boat_a_paramsdi.scr
AIDamageBoostMultiplier(20.0) - строка, теоретически отвечающая за повреждения, которые лодка нанесёт зомби... но это может быть и не так. Здесь же можно поэкспериментировать с параметрами Acceleration и BoostMaxLevel.
За погоду отвечает файл diweather.scr, но там вообще какие-то плавающие переменные, и их трогать я не стал.
Разработчики, кстати, не лишены чувства юмора. Если открыть в блокноте файл properties_defs, там можно найти отсылку к «Властелину Колец», которая была вставлена, скорее всего, просто для удобства, как generic-описание любого квеста.
Text("Objective", "Throw the ring of power into Mt. Doom")
Добавлено позже:Итак, моддинг позволяет изменить очень многие параметры игры. Однако бывалые моддеры знают, что с супер-параметрами «бога» очень быстро может стать неинтересно играть. Неуязвимый герой бегает и мочит всех врагов направо и налево... и это приедается.
Поэтому с самого начала моей целью было добиться определённых профитов - например, очень высокого прыжка и отсутствия повреждений при падении. Но при этом герой должен был продолжать получать повреждения от врагов.
Добиться этого мне так и не удалось. Как не удалось и открыть реген.
Зато можно было продолжить эксперименты с параметрами в файле default_levels.xml
<prop n="MaxStamina" v="1"/> максимальный уровень выносливости (у меня 4)
<prop n="StompStaminaUsage" v="0.3"/> здесь, естественно, можно выставить на 0, дабы стамина при растаптывании башки не тратилась вообще
<prop n="StaminaRegeneration" v="0.3"/> как быстро она будет восстанавливаться (у меня 3)
Пока я редактировал параметры и вообще изучал движок и зарубежные форумы, название движка подкинуло мне одну совершенно невероятную идею. А что, если окружающий мир в Dead Island построен иначе, нежели в большинстве игр?
В самом деле, известно, что например в Half-Life, DOOM, а также серии игр, пользующихся .bsp в качестве карты, персонаж воспринимается как отдельный объект на заранее подгруженной карте. DI же мне на какой-то момент показался чисто «браузерным» подходом, где мы воспринимаем окружающий мир только через глаза персонажа, и отдельные сектора этого мира прорисовываются только по мере поворота головы персонажа...
Была также мысль, что отдельные сектора карты прорисовываются по мере продвижения персонажа по ним, чтобы сразу не грузить огромную карту мира. А позади остаётся пустое место. Как в «Лангольерах».
В том, что это не так, я убедился, отключив параметр столкновения с землёй. Персонаж просто «проваливался» сквозь землю, и снизу можно было увидеть, что это таки одна огромная карта. Разработчики немного слукавили насчёт «открытости» и «бесшовности» мира - но карта действительно большая, и пока ваш персонаж доберётся от одного конца до другого, времени пройдёт немало.