Приветик! Наверняка многие играли в замечательную игру от компании Nival Interactive - Проклятые Земли.
Кто-то её помнит по сложным на первый взгляд противникам, кто-то по шикарному и удивительному сюжету, кто-то за удивительные фишки (крафт, стелс, возможность красть вражеские вещи из карманов и брать себе напарников) а кто-то полюбил её так как я и гоняет орков и кабанчиков по всему аллоду и по сей день.
Что касается уникальных фишек - в ПЗ их действительно очень много! Чего только стоит возможность собирать разные типы оружия из разного материала, да ещё и вставлять в него заклинания! Кстати, с бронёй можно сделать точно так же.
Следующая же фишка - вообще удивительный элемент геймдизайна как для 2000 года!
Зак сидит за пеньком прямо перед носом у орков, которые его не видят. Но если встать...
То орчиха начинает видеть Зака, ведь теперь он уже выше пенька! Но это далеко не всё то, за что можно выразить огромный респект геймдизайнерам и программистам того времени. Каждый, кто хотя бы на 30 минут запускал ПЗ, наверняка прекрасно помнит тот романтичный момент, когда Заку предоставляется возможность обокрасть первого же встреченного им здоровенного людоеда.
В игре есть 4 способа перемещения: бег, ходьба, на кортанах и лёжа. Последние 2 в оригинальном балансе игры являются абсолютно бесшумными способами передвижения, бег же наоборот своим звуком с большого расстояния собирает подозрительных противников. Потому людоеда я решила обокрасть именно на кортанах чтобы он меня не услышал.
Во время бега запас сил расходуется, а восстанавливается он только если пассивно находиться на одном месте. Атакующие, колдующие и двигающиеся персонажи не могут восстанавливать свой запас сил.
В игре также есть боевая магия. Использование атакующих заклинаний, как и всех других, серьёзно тратит запас сил персонажа. Только посмотрите как красиво Зак кастует молнию в этого лесоруба! Это стоит ему почти всего запаса сил не смотря на неадекватную прокачку.
Я люблю динамику в играх, но это не самое важное. Самое важное, что довольно глупо смотрится то, как маг стоит на месте и поливает магией своих противников, будто он воин, который надел броню и терпит, а вовсе не маг. Во многих современных играх можно атаковать в движении, что даёт возможность магам держаться от противника на дистанции и не получать в лицо от, допустим, толстого тролля с кучей хп и кучей урона.
В ПЗ же даже анимация такого действа не предусмотрена, потому геймплей магом крайне некрасив. Как, кстати, и стрелком, которому хоть запас сил для стрельбы и не нужен, но убегать от противника он может лишь несколько секунд, а потом сразу выдохнется... Что можно с этим сделать?
Нам понадобятся: Cheat Engine, IDA, HxD ну и сама игра Проклятые Земли.
Запускаем игру и Cheat Engine... Нам нужно узнать что записывает запас сил в память и что читает его у нашего героя из памяти.
Вбиваем число напротив синей шкалы и ищем его в памяти процесса game.exe. Довольно легко проверить, что запас сил персонажа - число типа float, как и большинство чисел в этой игре, касающихся харакреристик объектов, находящихся на картах.
Чтобы найти нужный адрес, достаточно побегать героем по карте чтобы его запас сил изменился и выбрать для отсеивания в Cheat Engine опцию Decreased value.
Уже с 3-й попытки я нашла запас сил в памяти. Теперь пора узнать что его записывает и что его читает. Жмём ПКМ + Find out what writes to this address.
00548323 - D9 57 14 - fst dword ptr [edi+14]
0052382D - D9 5E 14 - fstp dword ptr [esi+14]
0054834B - C7 47 14 00000000 - mov [edi+14],00000000
Получаем такие результаты. 1-е - трата запаса сил, 2-е - восстановление запаса сил, 3-е - полная трата запаса сил. Самое интересное пока - чтобы персонаж не был задохликом и бежал в зависимости от количества сил, а не жалкие 10 секунд.
Переходим чуть выше и смотрим что там по адресу EDI+14 и EDI+18. 1-е и 2-е закономерно оказываются запасом сил героя. 1-е - текущий, 2-е - максимальный.
Команда fst записывает в память из регистра FPU, команда fld же наобророт берёт из памяти и пишет в регистр FPU.
Стоит обратить внимание куда именно найденная нами команда fst dword ptr [EDI+14] пишет. Выше команда наоборот берёт оттуда значение.
Далее уже всё понятно: в регистры FPU берутся сначала текущий, потом максимальный запас сил, затем максимум умножается на константу (в оригинале она = 0.006666666666666666, а у меня она изменена на 0.1), это число отнимается от текущего запаса сил и результат кидается на его место. Мне захотелось сделать так чтобы запас сил расходовался по 0.2, а не по 0.1%. Максимальный запас сил нам не нужен, как и умножение на что-то, нам нужно отнимать само число. Используя сайт https://defuse.ca/online-x86-assembler.htm получаем, что желаемая нами команда имеет такой код:
dc 25 88 f0 73 00 fsub QWORD PTR ds:0x73f088
Вставляем его в движок игры, используя HxD, а остальное можно забить командой NOP.
Теперь надо всунуть другую константу чтобы персонаж хоть как-то терял запас сил при беге (отнимать 1/150 - уж очень мало)...
Окей, теперь персонаж бегает, теряя запаса сил не по 1/150 от его части, а по 0.2 единицы. Но это всего лишь значит, что с запасом сил более 30 наш главный персонаж будет бегать дольше, чем в оригинале, но особенной динамики само по себе это не принесёт. В битвах уж точно.
Сам факт восстановления запаса сил нас прекрасно устраивает, нам надо только изменить его условия. Ну а точнее убрать их подальше. Посмотрим, что из кусков кода читает запас сил и что от него отталкивается. Снова запускаем игру и Cheat Engine. Жмём ПКМ + Find out what accesses this address. Надо снова немного побегать и постоять, восстанавливая запас сил героя.
00548679 - D9 47 14 - fld dword ptr [edi+14]
005482D3 - D9 47 14 - fld dword ptr [edi+14]
00548315 - D9 47 14 - fld dword ptr [edi+14]
00522C82 - 8B 51 14 - mov edx,[ecx+14]
0052377A - D9 46 14 - fld dword ptr [esi+14]
00523805 - D8 46 14 - fadd dword ptr [esi+14]
Получаем вот такой контент. 1-е - включение бега, 2-е бег, 3-е - бег, 4-е - изменение запаса сил, 5-е -релакс, 6-е - восстановление запаса сил.
Естественно и очевидно что нам интересно именно 6-е и в каких случаях эта команда выполняется в коде игры. Внимательно смотрим повыше в ассемблерном листинге и находим там это начало функции. Видим чуть ниже условный переход, который не выкидывает сразу же из функции, но полностью скипает другие проверки, в том числе он скипает и восстановление запаса сил. Скорее всего это и есть проверка, находится ли персонаж на 1 месте (в релаксе) или же не находится.
Пробуем поменять, чтобы прыжка через этот кусок кода не стало...
И да! Всё получилось, теперь герой регенирирует свой запас сил даже во время каста заклинания. Ну и во время бега, конечно же, тоже.
Поменяем значение в game.exe через HxD, чтобы наслаждаться динамичной игрой...
Но это не всё. Игра за мага, ясное дело, получается в принципе из-за магии. И динамичная игра за мага определяется самими заклинаниями. В игре есть куча неиспользованной магии. Некоторые заклинания вполне рабочие и просто не продаются в магазинах, как например "мертвец" и "зрение мертвеца" (а в аддоне к Проклятым Землям - Проклятых Землях: Затерянных В Астрале так наоборот, они продаются, но не продаются "фейерверк" и "телепортация"). Но некоторые заклинания игры суровейшим образом отключены прямо в самом движке.
По адресу 0х0067F870 в памяти игры есть функция, выбирающая 1 из 43 эффектов для используемого заклинания. Наверняка этот скриншот очень многое скажет о сложности этой функции (там всего довольно много)...
Довольно долго и нудно, но при этом легко и просто я пришла к этому адресу, где жёстко и грубо выпиливаются 3 заклинания ещё на подходе по их номеру.
15h - Possession, 18h - Link, 24h - Charm. Теперь это всё надо превратить в NOP чтобы получить доступ к засекреченным заклинаниям! Ухх, как же интригующе!
Итак... Новые заклинания получены! Теперь достаточно ввести в игре в магазине в консоль, нажав на "ё", следующие команды:
thingamabob
give 0 money 99999999
give 0 assortment
Теперь чтобы игра не забаговалась стоит выйти из магазина, ну и зайти обратно...
Покупаем заклинания за 200 (с розовым дымком и светлым сиянием, это Possession), за 3200 (с собачкой, это Charm) и за 400 (с пьяным мужиком идущим во тьме, это Link) и идём их тестировать!
Начнём с конца... Link делает ровно ничего, у него даже кода нет, только анимация и её завершение, очень полезное заклинание.
Charm подчиняет противника очень странным образом, заклинание явно не имеет полного кода и игра вылетает при попытке подчинить следующего противника.
Possession же - действительно находка!.. Скриншот будет лучше всяких слов.
Это заклинание позволяет перенести взгляд героя в противника. Сам эффект не очень эффективный, но очень интересный. Если бы оно было на ранних аллодах, а орлиного взора, ночного зрения и ясновидения не было на Гипате и Ингосе (ну или в ПЗ: ЗвА - на Суслангере и Гипате), это заклинание было бы прекрасным и интересным инструментом для шпионажа за патрулями и позициями противников.
Эти изменения я ввела для ПЗ ещё очень давно, а чуть потом мне удалось запихать их и добавить ещё множество новых в специальную библиотеку, которая является одним из самых масштабных дополнений для движка ПЗ, которое я назвала SpellAddon.
Используя внутриигровые скрипты получилось сбрасывать агрессию противников, что в оригинале было невозможным без перезахода на игровую локацию, даже телепортировавшись через всю карту, через горы и реки, противник всё равно находил главного героя и стремился его убить, пока 1 из них не окажется повержен.
Стоит заметить, что всё выше написанное актуально для версии игры 1.06 и на остальных версиях операции не проводились.
Полезные ссылки:
https://evilislandsaddon.forumotion.com - форум на котором можно найти SpellAddon.
https://vk.com/evil.islands - группа в ВК
http://gipat.ru - форум "Город джунов".
http://gipatgroup.org/forum - самый масштабный, но не особо функционирующий форум "GipatGroup". Впрочем, прочитать на нём полезную информацию сейчас возможно.
http://honestgroup.net/forum — форум HonestGroup.
Всем удачи!
Комментарии (39)
northzen
29.08.2022 05:02+11Отличный пост. В нем и ностальгия, и достаточно понятный и хорошо описанный процесс, и так же ссылки для тех, кто хочет обратно прикоснуться.
Nival -- гении своего времени.До сих пор удивляюсь тому, насколько сильная на то время графика шла на доступных картах.
Игре не помешал бы официальный ремастер, где подтянули бы текстуры, модельки, тени, освещение. При этом особо не трогая игровой процесс.OSerge
29.08.2022 14:44+2Дико плюсую. Мечтаю, чтобы сделали ремастер. Услышь нас Nival!
Schwert
29.08.2022 23:11+1Поддерживаю
staticmain
29.08.2022 23:17+3Nival мертв, последние подвижки были в 2017м (5 лет назад), когда выпустили Blitzkrieg 3, после чего сайт заморозили, вакансий нет.
Offensive Автор
30.08.2022 08:16+1Я занимаюсь созданием сюжетного дополнения)). Если это интересно, можно следить за форумом)).
michael_v89
30.08.2022 01:39+1А я думаю, фильм бы кто-нибудь сделал. Вот прям по сюжету, только с настоящими актерами.
Cataclismo
30.08.2022 05:28+2Помимо графики можно было бы и реиграбельности добавить, например, процедурно генерируемые леса с деревеньками орков, людоедов(на Гипате) и базами людей на других островах. Добавить после алмаза ещё кристаллы, чтобы у оружия и брони был потенциал для улучшения.
Эх...был бы миллионером, думаю, первым делом нашёл бы армию фанатов игры и программистов по совместительству и делал бы с ними продолжение игры, не жалея денегOffensive Автор
30.08.2022 08:23Можно респаунить орков и людей, у меня путём кошмарных извращений вышло даже остальных противников респаунить)). Ну и подогнать это дело скриптами можно под ситуацию. А кристаллы уже давно добавлены в разных модах, скачать их можно, например, на сайте вселенной аллодов.
LoadRunner
30.08.2022 22:03Эх...был бы миллионером, думаю, первым делом нашёл бы армию фанатов игры и программистов по совместительству и делал бы с ними продолжение игры, не жалея денег
Кикстартер же.
Offensive Автор
30.08.2022 08:15О да, движок, сюжет, озвучка, крафт и даже баланс в ПЗ сделаны прекрасно! Только на ремастер расчитывать не стоит, всё равно графика не вырвиглазная))... А улучшенные текстурки сделали в своих HD-Pack'ах уже давно Atom и Durane!
7313
29.08.2022 08:05+7кто проходил проклятые земли по геноциду gipatgroup.org/genocide.html смотрит на все остальные грушки с усмешкой :)
staticmain
29.08.2022 12:40+2Так вот куда он переехал! Раньше был на другом адресе, который сейчас недоступен. Буквально несколько недель назад выуживал из wayback machine и перепроходил уничтожая всё живое.
P.S. А по теме статьи - почти все "хаки" что перечислены упрощают эту игру. Этой игре это не нужно.
Offensive Автор
30.08.2022 08:25Это не для упрощения игры, а для взаимодействия с модификациями к ПЗ). Я как раз занимаюсь такими, а ещё в моде Жамевю они используются.
Offensive Автор
30.08.2022 08:21Хм))... Стоит ли написать статью про ещё более жёсткий страшный геноцид)?
staticmain
30.08.2022 12:54А кто остается-то? Драконы убиваются, матка панцирников убивается два раза. Неубиенным остается только самая первая жаба на пригорке и циклоп.
Offensive Автор
30.08.2022 15:21Циклопа вынести можно, я жабой тоже можно подумать + всё без фейерверка)))...
OmManiPadmeHum
29.08.2022 14:16+2Гипатский легкий шлем из крепкой кожи. От упавшей на голову шишки спасет. А вот от камня - вряд ли.)
Tufed
29.08.2022 14:34+1Опять проходить…
А так то в то время было обидно не столько от не умения персонажа восстанавливать запас сил во время действий, сколько от бесконечного запаса сил противников. НПС могут столько угодно долго бегать и кидаться магией магией нон стопом. И верно подмечено, геймплей мага это умение танковать лицом противника пока стоишь и восстанавливаешь запас сил. Выглядит странновато.
Полноценное 3D, с дымами, частицами и мип-маппингом(в котором разбираться я стал только через 15 лет). В целом для 2000 года очень даже круто. Популярности у игры на мой взгляд было крайне мало. Среди моих знакомых того времени никто её не знал, абсолютно.
Аддон же затерянных в астрале ждал с нетерпением, но получив проходил со смешанными чувствами, что делался он наспех 2,5 человеками за еду.staticmain
29.08.2022 17:00+1геймплей мага это умение танковать лицом противника пока стоишь и восстанавливаешь запас сил. Выглядит странновато.
Чаще всего геймплей мага - это заклинаниями загнать противника в щель "часовым замком", а потом жарить стеной огня до хрустящей корочки.
Или собрать молнию У++ + У++ и шотать всё живое уходя маной в 0 с первого прокаста.Offensive Автор
30.08.2022 08:20Ну это смотря какая сила у противника, мало где можно просто так загнать противника в узкое место, усилив и ослабив его, впрочем это нужно только с маткой панцирников за всю игру)...
staticmain
30.08.2022 12:55Не-не, еще все големы так "водятся" по тоннелю чтобы алмазный их покрошил, а мы добили и получили опыт
Offensive Автор
30.08.2022 15:20Алмазный голем был приведён мною через ущёлья и зажарен после остальных, это да, но это немного другое уже %). Матка-то специально поджимается мобом чтобы быть зажарена в продуманном узком месте.
Aspecter
29.08.2022 17:56+3Воспоминания нахлынули. Помнится проходил Затерянных в астрале ещё до того как у меня интернет появился, и завис на одном моменте на аллоде Джигран.
По квесту дают ключ от темницы сырой в тюрьме-инстансе, и надо ее проползти не попавшись на глаза ни одному охраннику, вызволить пленника и смыться. Все было хорошо, весь аллод на брюхе прополз и стелс проблем не вызывал, но стражник около тюремной камеры постоянно поднимал тревогу из-за открытой клетки. Как ее закрыть я не вкурил и квест дальше не двигался. Покурив механику игры я нашел альтернативный путь! Стражника можно было убить из лучшего доступного оружия ударом из стелса со срины в голову. Надо всего-то вкачать мастерство на одном оружии и купить недешевое копьё. Очень недешевое.
Было украдено и продано всё на карте до чего дотянулись загребущие руки, нещадно перебиты все пауки и прочая живность с которой можно было поиметь хоть копейку. На зачистку карты и сбор 5000 денег ушла неделя реального времени.
Момент истины. Стражник лёг только с 15 попытки, никакого лута нн оставил и опыта тоже не дали. Зато путь был свободен и больше некому было поднимать тревогу. Возволяю пленника, взгляд падает на ключ... А что если?
Ларчик просто открывался. И закрывался. Тем же ключом можно было закрыть темницу, квестовый предмет не был одноразовым.
Проверяйте самые очевидные пути в первую очередь.
Offensive Автор
30.08.2022 17:16+1Прикольная история))! Интересно, когда именно это было))? Кстати, то был Суслангер - одна из начальных миссий). И да, наверное самая сложная во всей игре...
Aspecter
30.08.2022 18:02Когда? Лет пятнадцать назад) Да, верно, это был Суслангер, Джигран - последний четвертый аллод.
Это задание с невестой Фейруза, спасение Алии.
Amomum
29.08.2022 22:34+1Перепроходил ПЗ несколько раз и всегда с читами (посколькуо у меня не было времени на проблемы, а сюжет интересный) - собственно, за мага играть было очень удобно - набиваешь себе запредельную ману, сверхбыструю регенерацию маны и во все заклинания вставляешь читерские руны (огорчало, что у них вместо текстуры был просто белый квадратик) - и вуаля, получаются очень удобные заклинания "умри с одного нажатия" (кислотный плевок или молния) и "убей толпу с одного нажатия" (кислотный туман).
FLii
29.08.2022 23:12+1Ностальгия!!!
Помню, что психанул и полез искать чит-коды когда на надцатой неудачной попытке ползя на пузе перепутал кнопки нажал Ф6 вместо Ф5 (или наоборот), тем самым сохранившись за секунду до фейла. А возвращаться на несколько часов раньше уже не было сил.
Помню как 5-ти летний сын бегал за спиной и возмущался: «Папа, нас сейчас убьют!!! Папа!»
FlashHaos
30.08.2022 00:19+1Была абсолютно аналогичная (разве что без сына, мне самому леи десять было) история. Ох уж эти кнопки сохранения!
KReal
30.08.2022 00:45+1Когда я первый раз проходил ПЗ (было лет 14 вроде), на мои крики прибежала мама… и втянулась) В итоге после меня прошла самостоятельно и, кажется, даже быстрее)
dopusteam
30.08.2022 09:09В одной игре, не помню где, видел, имхо, гениальное решение проблемы. Там под быстрые сохранения выделено несколько слотов, так что запоров одно, можно запросто достать чуть более раннее быстрое сохранение. Почему интересно так все не делают
Offensive Автор
30.08.2022 17:17Это как))? Когда прожимается быстрое сохранение, то предыдущее просто остаётся?
dopusteam
31.08.2022 07:19При нажатии на 'быстрое сохранение', сохранение падает в один слот. При следующем сохранении - во второй слот. Всего слота, допустим три, так что четвёртое быстрое сохранение перетрёт первое. Короче, всегда есть три последних быстрых сохранения. Если нечаянно сохранился прямо перед смертью, то есть ещё два старых быстрых сохранения, к которым можно вернуться
vectorplus
Рычаг я дам
Камень я не дам
PippiLongstocking
"Эх, не получилось"