ZX-Ревю Украина 1996 №2-3 1996 г.

Делимся опытом - CHEAT и POKES в игровых программах.


CHEAT и POKES « в игровых программах

(С) Александр Десятниченко г.Сумы 1996 г

ДЕЛИМСЯ ОПЫТОМ

над применением предметов. Безусловно. все эти факторы сильно повлияли на темпы прохождения игр, которых начало появляться все больше и больше. Сами же игры становились все красочнее, начали создаваться так называемые FINAL CUT, - это когда в самом конце игры при ее успешном прохождении демонстрировалось что то типа мультфильма с поздравлениями и теперь играющего, после аждого успешно пройденного экрана, начал мучить самый актуальный из всех вопросов, - а что же там. дальше?

Вот примерно в это время и появились первые методы "нечестной" игры. В чем они заключались? Конечно же. в устранении причин, усложняющих игру, и, в первую очередь, это касалось лимита жизней ведь мало кому удавалось 1. История методов пройти огромное игровое прост-

'4+ечестной" игры ранство с пятью жизнями в услови

ях. когда на тебя все время бро-Самые первые игровые програм- сают камни, да еще и выполнить мы для ZX SPECTRUM Были достаточ- при этом поставленную задачу, но примитивными и, соответствен- Тот, кто хоть немножко разбирался но. сравнительно легкими в игре в машинном коде. тоосматривал Наверное, любой из вас сможет ча- листинг программы с целью наити в сами играть в RIVER RAID, залетая ней адреса ячеек памяти, в кото-очень далеко и обходясь при этом рой хранилось колличество жизней, тем скудным запасом дополнитель- а также адреса, в которых это са ных жизней, которым был наделен мое колличество уменьшалось с пилот создателями программы Но каждой гибелью персонажа, и но-по мере того, как совершенствова- сил изменения в текст программы лась техника программирования, то ли непосредственно, то ли с усложнялись и сами игры. Уже в помощью оператора РОКЕ в бей-1985 году появились программы, сик-загрузчике Позже списки та игровое пространство которых нас- ких POKES начали публиковаться в читывало от нескольких десятков компьютерных журналах и у каждого до нескольких сотен экранов. Это пользователя появилась возмож-такие хорошо известные вам игры ность самому задавать в игре кол-как STARQUAKE, FIRELORD, ROBIN in личество жизней, необходимое для the WOOD и многие другие. Значи ее прохождения или же просто лик-тельнс увеличил >сь колличество вида звать уменьшение числа до-противников в игре и заметно воз- полнительных жизней, установлен-росла их агрессивность, начались ного самой программой. К тому вводиться ограничения по времени времени загрузчики уже достаточно выполнения поставленой задачи и хорошо защищались, лоэтому неко-амуниции главного персонажа. Воз торые игры "обессмерчивались" росли требования и к мозгам игра- внесением жестких изменений не юцего, - теперь приходилось дер- посредственно в тело игры с пожать в голове карту лабиринта, мощью копировщика COPY-COPY (Pi раскладку предметов по локациям и rate 02), который позволяет это при этом еще подбирать ключи к делать. Именно в таком виде и дверям или, параллельно со дошли до нас такие игр как A IEN стрельбой по врагам, размышлять 8, NODES of YESOD, INDIANA ONES

и DIZZY.

Фирмы-производители игр мгновенно же отреагировали на такую наглость и наказали пользователя кодированием основного блока игры. Теперь уже, прежде чем "зациклить" программу, ее требовалось взломать и раскодировать. Жестко обессмерчивать игры стали реже, все чаще это стало делаться из загрузчика. Начали учитываться и интересы играющих ^по-честному", в хаккерских загрузчиках перед РОКЕ ставилось REM. чтобы в обычном режиме игра работала нормально. а те, кто не укладывается в лимиты, установленные программой, мог убрать оператор REM и играть с бесконечной жизнью. Некоторые загрузчики, перед тем, как запус ить игру, задавали вопрос: "INFINITE LlVfeS (Y/N) ? и, в случае утвердительного ответа, вносили соответствующие изменения. Новым словом было меню выбора режима игры. Впервые это можно было наблюдать в программе NEBU-LUS, позже - в загрузчиках Билла Гильберта к играм KRAK0UT 2 и R0-' ВОСОР. Появились и первые мегат рейнеры, - так называют меню из нескольких, от трех до десятка пунктов, воспользовавшись которыми, можно полностью настроить все лимиты в игре по своему вкусу, начиная от бесконечной жизни и заканчивая входом сразу же в любой уровень игры. Первые такие мегатрейнеры вы могли увидеть в играх SLAP FIGHT и NORTH STAR, особого же развития "инфинитиза-ция" прс грамм нашла в нашей стране, благодаря отсутствию закона об авторских правах. Сейчас практически каждая программа, адаптированная к работе в TR DOS, снабжается если не мегатрейнером то хотя бы единичным РОКЕ. А ведь есть еще огромная масса игр прошлых лет, так ни кем до конца и не пройденных, а сколько еще есть новых игр. пока до нас еще не дошедших. .. Многие из вас могут сказать, что все уже до нас дошло и ничего нового больше не б те т. А где же FLYING SHARK 2, AIRWOLF 3,. SAVAGE 4, THUNDERCEPTOR 2. FfcRNANDEZ IMAGEWORKS 2 и сотни других игр с новыми названиями, видели ли вы их, ведь достоверно известно, что эти игры существуют, есть даже их описания в переводе с английского!

Неоднократно на страницах различных изданий поднимался вопрос о моральных аспектах беско нечных жизнеи. Я же. являясь плохим игроком и поклонником всех методов нечестной игры, оставляю решение этого вопроса на совести каждого и считаю своей задачей только просто ознакомить вас с методиками поиска адресов' бессмертия, а как ими пользоваться, -то ли использовать только для себя, то ли встраивать в свои загрузчики и предлагать в таком виде широкому кругу пользователей, -пусть каждый из вас определиться сам.

2 Фирменные CHEAT

Хорошо помню, как в начале "синклеровской" эры ходили самые невероятные слухи о том, что в некоторых программах есть так называемые "горячие" клавиши, нажи мая которые, можно вытворять та кие вещи, как проходить сквозь стены, перескакивать через экраны и целые игровые уровни обеспечить себе бессмертие и неограниченный боезапас. Затем постепенно эти мошенничества (по-английски -HEAT) становились предметом все большей огласки, и сейчас уже каждый школьник знает, что если в меню программы CYBERNOID 2 выбрать REDEFINE KEYS, а затем, на запрос переопределить клавиши влево, вправо и т.д., нажимать клавиши, которые в совокупности напишут на эк ане слово ORGY", то можно запросто стать бессмерт ным.

Очень интересные CHEAT в играх сериала DIZZY Так, если после загрузки TREASURE ifeLAND DIZZY (DIZZY 2), нажать одновременно клавиши Р, 0 и А. а затем ENTER, то запуститься такой CHEAT. Те перь в любой момент в процессе игры можно нажать клавишу С (при этом сам Диззи исчезает) и клави шами Z. X, К и М передвигать игровые экраны. 1ажатие UMP на джойстике возвращает Диззи в этот выбранный вами экран и можно продолжать игру уже с этого места. Еще круче устроен CHEAT в SPELLBOUND D ZZY 128К (DIZZY 5). Если в титульной странице набрать "IWANTANOMLETTE" (если не получиться с первого раза, то можно повторять до тех пор, пока бордюр не заморгает), то в процессе игры при нажатии на клавишу С на экран вызывается целое меню с выбором типа CHEAT, пользуясь которым можно не только двигать экра ами, но и выбрать любой предмет, добавить себе звезд и жизней, даже сразу спасти всех членов семейства. Практически все программы фирмы OCEAN имеют встроенные фир менные CHEAT. Например, если в таблице рекордов игр NAVY SEALS 1 & 2 набрать вместо своего имени фразу "CLUBBING SEASON", то, при затруднении в прохождении, можно нажать ENTER и перейти сразу на •ледующий уровень. Практика пока зывает, что абсолютное большинство CHEAT активизируются тремя способами: переназначением клавиш управления, набором кода в титульном листе, набором кода в таблице рекордов. Однако, бывает,, что прог мма на протяжении всей игры п ддерживает CHEAT, в игре IRON SOLDIER в любой момент можно сделаться бессмертным, нажав одновременно клавиши G, A.D.

Что же это за CHEAT и откуда они там взялись? Дело в том, что программист, создающий игровую п ограмму, должен проверить ее работу и проверить ни как нибудь, а бойти все экраны, пропрыгат ь по всем кочкам, поубиваться на каждом ко.пытке... Другими словами. он должен предусмотреть все возможные и невозможные варианты игры в каждом игровом экране, чтобы программа везде правильно отработала и нигде не зависла, не говоря уже о том, что он должен прейти несколько раз всю игру от начала до конца полиостью, убе дившись в ее нормальной работе и в достижении поставленной цели. Конечно, отдельные подпрограммы можно проверить и под наблюдением монитора-отладчика а вот полностью игру - только в том виде, в котором ее получит пользователь. Разумеется, не каждый программист, даже если он является автором своей собственной игры, может быстро и легко проити до конца. скажем, NARCOPOLICE со всеми уровнями. Поэтому, чисто для себя, программисты делали вот такие секретные CHEAT, набирали после загрузки пароль и проверяли свою игру от и до. Почему же они не убирали их после окончательной отладки? А вы представляете, что такое полностью готовая фирменная игра с кучами защит? -Не так-то просто убрать из нее фрагмент программы, особенно если он сотни раз перексорен" и упакован вместе с основным блоком игры. К тому же, спустя некоторое время можно опубликовать этот CHEAT и вызвать этим новый интерес к ;воей игре у тех. кто ее не смог пройти раньше.

Если же вам очень хочется пройти до конца какую-нибудь интересную. но тяжелую игру, а ни HEAT, ни POKES к не вам неизвестны, можно попытаться найти такой CHEAT самому, для этого да же знания ассемблера поначалу не понадобиться, потребуется хорошая программамонитор и немножко вашей интуиции. Проще всего это делается на диске, - декомпрессируется длинный кодовый блок и ры, записывается а диск и просматривается монитором на предмет поиска в нем текстовых сообщений. При работе с лентой, после декомпрессии основного блока игры, загрузите любой ди ассемблер и запустите его "на дамп". Просматривая содержимое памяти, особое внимание обратите на текстовые сообщения которых во время игры вы ник гда не видели на экране, и, если на глаза попадуться таковые, запиши те или запомните их. Чаще всего это необычные слова (как в DIZZY) ли фразы, намекающие на СН] А Так, в игре MIDNIGHT RESISTANCE это будет предложение "I AM AN OCEAN TESTER", сразу же за ним расположена целая подпрограмма^ которую можно запустит) командой

ДЕЛИМСЯ ОПЫТОМ

RANDOMIZE USR 28749, которая предложит вам настроить игру по своему вкусу. Найдя такие необычные фразы, можно попытаться набрать их в титульном листе или таблице счета. Если ничего не получиться. а подозрение на эту фЬазу очень большое, то прийдется обратиться за помощью к дизассемблеру, с целью найти, где в программе идет обращение к этой фразе и что после этого должно пр изойти. И совсем /ж надежно можно найти что-либо интересное, просматривая подпрограммы опроса клавиатуры. Ведь переопределением клавиш, опросом го ячих клавиш во время игры и контролем над однов-р менно нажатыми клавишами занимаются именно такие подпрограммы, и если вы найдете опрос клавиш, не участвующих в игре, то наверняка это CHEAT. Я не привожу практических примеров того, как выглядит опрос клавиатуры на языке ассемблера, так как сам применяю 5 -6 способов такого опроса, что же касается программистовпро-фессионалов, то всех пальцев на руках не ватит, чтобы просто только перечислить методы, с помощью которых можно контролировать нажатие нескольких клавиш, всего ряда или тем более единичной клавиши, к тому же, надеюсь, каждый, кто собирается самостоя ельно обессмерчивать игры, имеет представление об этом.

Есть еще одна особенность, которую тоже можно отнести к теме фирменных CHEAT, по крайней мере, в рамках этой статьи. Это касается кодов и паролей, которые выдают некоторые программы после прохождения определенного этапа игры, например, игрового уровня, и с помощью которых впоследствии можно будет начать играть, пропустив уже пройденные ранее уровни игры. Такие коды и пароли неоднократно публиковались в печати. обнаружить их самому среди текстовых сообщений также не составляет особого труда, если они не закодированы, конечно. В некоторых программах, например, L0R-NA, вообще такие коды к ровням написаны с пояснениями: 'CLAVE

ACCESO FASE 2: LOLI", "CLAVE АС-CESO FASE 3 PLANlfaGA" и Т.Д. Очень часто пользователи жалуются, что. зная код. они не могут его набрать, - клавиатура опрашивается настолько быстро, что стоит только коснуться первой клавиши, как этой буквой мгновенно заполняется все пространство, выделенное для набора секретного ело ва. Извините, мои дорогие, но в этом виноват ваш компьютер, - он не "по-фирменному" опрашивает клавиатуру. Конечно, можно повозиться и переписать процедуру опроса. но если вы только хотите просто посмотреть, что там. в следующем уровне, а не выпускать эту игру для широкой аудитории, то я могу поделиться с вами сек ретом, как "по-варварски" бороться с непослушной клавиатурой. Принцип борьбы очень прост, - уж если ваш компьютер так резво выбивает целую строку одной и той же букЬы, так не препятствовать ему надо, а помочь в этом! Для этого снова запустите монитор, который позволяет не только просматривать, но и редактировать со движимое памяти, и поменяйте код. Например, если для второго уровня игры LORNА был код доступа L0LI. то вы его перебейте, скажем, на 2222. Теперь, когда программа попросит вас ввести код для загрузки второго уровня, просто нажмите на клавишу 2. Послушная ма шина выбьет столько двоек, сколько поместиться в отведенное для этого место на экране, после чего можно смело нажать на ENTER и загружать второй уровень. Еще раз хочу напомнить вам, что распространять программы с такими жестко внесенными изменениями ни в коем случае нельзя, ведь есть люди, которые из описания игры или из компьютерного журнала узнали коды доступа к уровням игры, а войти в них не смогут благодаря вашим, с позволения сказать, "модернизациям". И еще одно замечание. Код доступа может храниться в программе дважды, - в текстовом сообщении, выводимом на экран после успешно пройденного уровня. и просто само собой, - к нему и бу дет обращаться программа для сравнения с кодом, который набрали вы.

3. Использование опубликованных POKES.

В многочисленных изданиях, посвященных ZX SPECTRUM публиковались длинные списки POKES, была даже издана отдельная книга с POKES для 600 игр. Правда, большинство из них никто не проверял, во многих были допущены ошибки (об этом предупреждал!- и сами издатели), большое колличество POKES подходило только для определенной версии игры, некоторые вообще предназначались только для жесткой установки с помощью копировщика. Неоднократно приходилось замечать и просто перепечатки из издания в издание с теми же самыми ошибками. И это еще ничего, гораздо хуже, когда некоторые ребята [рисылают в журнал POKES, взятые из других издании или из Чужих загрузчиков, делая ударения на том, что они их нашли сами. При испытаниях же оказывается, что многие из них содержат явные ошибки и даже не проверялись. Определить что эти POKES были найдены не их псевдо-авторами очень просто,- это сразу видно, если адрес бессмертия точно совпадает с необходимым , а значение, которое нужно занести в эту ячейку, не приводит к желанному результату. Например, для одной из игр было предложено для установки бесконечной жизни по адресу 32132 занести 0. Оказывалось же, что если занести в эту ячейку 0, то после первой же ошибки игра выдаст "GAME OVER", потому, что в эту ячейку на самом деле нужно занести число 182. Можно смело делать вывод что это РОКЕ не только не принадлежит егс мнимому автору, но даже не проверялось.

В связи со всем этим, к опубликованным POKES нужно относиться с осторожностью, особенно если вы устанавливаете их жестко. В идеальном случае POKES устанавливаются в загрузчики игр после заг рузки длинного кодового блока и декомпрессии этого блока, то есть перед последним RANDOMIZE USR. К сожалению, многие хакеры публикуют свои POKES, найденные в программах,, загруженных под произвольный адрес или нераспакован ных. Кстати, сейчас развелось очень много разных упаковщиков, которыми компрессируются длинные кодовые блоки, естественно, POKES, наиденные в программе, упа-ковакой одн -tM компрессором не подойдут для программы, откомп--рессированной дэугим. Очень хоте лось оы, чтобы все, кто собирает ся обнародовать собственноручно найденные адреса бессмертия, ука зывал их для того случая, когда программа агружена на свое род ное место в память машины и полностью распакована. Разумеется, это дслжны быть безупречные РО KES, правильно работающие и не дающие нежелательных побочных эффектов. А для тех. кто не смог найти в печати POKES для" тяжелой игры или же просто не доверяет им, можно порекомендовать только одно, - загрузить дизассемблер и найти таковые самостоятельно.

ДЕЛИМСЯ

/

4. Поиск адресов бессмертия.

За период с 1991-го года с целью обессмерчивания мною было исследовано порядка 800 игр, попытаюсь поделиться с вами своими методиками поиска и успехами на этом поприще. Итак, с чего на чать? Конечно же в первую оче редь нужно запустить саму игру и. убедившись в ее нормальной работе, немножко пои1 рать, обратив особое внимание на такие вещи,, как сколько дополнительных жизнеи дается программой, как это отображается на экране, как эти жизни отнимаются и что происходит, ког да лимит жизней исчерпался до конца. После этого нужно разобраться. заглянув в загрузчик, под какие адреса загружаются файлы программы и как они запускаются Если с этим возникают затруднения, то сначала загрузчик прий дется взломать и привести всю иг ру к такому виду, чтобы она легко загружалась и запускалась из бей сика командой RANDOMIZE USR. Как это делается, вы, надеюсь, пони маете, по крайней мере, это тема для отдельной статьи и таких статей и елых книг было немало. Пусть не обижаются на меня и зрелые хакеры за то. что я так подробно "разжевую" в своих с/атьях по их ме зкам, порой элементарные вещи Просто я ставлю себе целью написать так, чтобы даже те, кто только вчера сел за компьютер прочитал, попробовал и незаметно даже для себя перешагнул барьер между бейсиком и машинным кодом, потому, ч о сам я начинал осваивать ассемблер именно таким образом, пытаясь обессмертить строптивые игрушки.

ОПЫТОМ

Для первого примера наилучшим образом подходит какая-нибудь широкораспространенная и одновременно с этим достаточно трудная игра, например, STAR BOWLS. Как вы заметили, первоначально игроку дается 8 жизней, которые очень быстро впоследствии убывают. Из загрузчика следует, что длинный кодовый блок игры- загружается под адрес 26000 и запускается с адреса 34620, предварительно распаковавшись запуском с начального адреса загрузки Загружаем этот файл (не забывайте перед этим установить CLEAR на единицу меньше, чем адрес загрузки, то есть 25999) и распаковываем командой RANDOMIZE USR 26000. Теперь нужно загрузить и запустить дизассемблер. но как же это сделать, ведь для этого нужно больше 6 кБ памя ти, а у нас она вся занята загруженным и декомпрессированым длин ным блоком .гры? Но ведь не вся память занята машинным кодом программы, ведь для игры требуется еще большое колличество графики. музыки, таблиц и т. д. которые нам сейчас не нужны. Если же известно, что игра запускается с адреса 34620, то можно предположить, что от этого адреса и ниже до 26000 и располагается вот эта ненужная нам гика информация, значит, сюда и загрузим дизассемблер. Конечно, если вы работа ете с диском, то можно сразу с помощью монитора определиться.

где в файле полезная информация, предварительно записав его в распакованном виде, и совсем нет п облем с 128к-машинами позволяющими без накладок загрузить и исследовать код с помощью замечательного STEL Н STALKER MONITORa. Запустив дизассемблер, давайте попытаемся найти в программе то место где задается колличество жизней. Классически колличество жизней помещается в аккумулятор и заноситься затем в ячейку памяти, постоянно его хра ящую. Попросим дизассемблер наити нам мнемонику LD А,#08. Он мгновенно остановиться на адресе 47805:

47805 LD А,#08

47807 LD (48249),А

Теперь становиться понятным, что колличество жизней постоянно храниться в ячейке 41 249. А что. если занести туда не 8, а, скажем, 100 жизней? Для этого можно перезагрузить длинный блок, очис тив память, декомпрессировать его ( RANDOMIZfe USR 26000) Й лать РОКЕ 47806,100. Теперь Запустите саму игру (RANDOMIZE USR 34620) и вы собстве! ными глазами увидите, что колличество жизней значительно возросло, правда, их стало почему-то не 100, а только 64 .. Дело в том, что эта игра распечатывает колличество жизней в шестьнадцатиличном представлении и если вам понадобиться 255 жи -ней, то на экране вместо привычного числа 255 появиться FF. Многие игры проверяют колличество жизней и не печатают на экране, если их, скажем, больше 9. Игра B0SC0NIAN, например, печатает колличество жизней в десятичной форме, но под это колличество на кран з выделено то око jва разря-а и если вы зададите ей больше 9 жизней, то после первого же столкновения получите GAME OVER. Есть игры, которые отображают колличество жизней не числом, а соответствующим количеством предметов, например, колличество жизней в игре R0B0C0P соответствует количеству голов Робокопа в нижней части экрана. Представляете, что будет, если задать их больше, чем предусмотрено? Конечно, если программа проверяет это, то отсекает лишние, а если нет? Тогда в LAST NINJA 2 программа при распечатке количества оставшихся жизней попытается выстроить в одну шеренгу 255 ниндзей, а игра MURRAY MOUSE SUPER СОР попробует разместить в пределах экрана 255 мышей . К тому же, даже такого огромного запаса жизней не всегда может хватить для успешного завершения игры, - я, например, не уверен, что на двадцати семи уровнях игры SPACE HARRIER 2 меня уоили меньше 255 раз.

ДЕЛИМСЯ ОПЫТОМ

По всем этим причинам такой способ решения проблем с количеством жизней не только не нашел распространения, но он и нежелателен. Гораздо красивей и надежней работают POKES, устраняющие убавление жизней. Поскольку обычно за один раз отнимается только одна жизнь, то наиболее вероятнее, по-видимому применение команды DEC для этой цели. Давайте вернемся снова к STAR BOWLS и проверим это предположение. Как мы уже знаем, для постоянного хранения колличества жизней в этой программе выделена ячейка памяти по цресу 48249. Попробуем отыскать фрагмент, где бы шло обращение к этой ячейки памяти, например, через аккумулятор. Дизассемблер выдаст:

46275 LD А. (48249)

46278 DEC А

46279 DAA

46280 LD (48249), А

Таким образом наше предположение оправдалось. Командой DEC А по адресу 46278 колличество жизней уменьшается на единицу, затем снова отправляется на постоянное хранение в ячейку 48249. Что ж. попробуем направить работу этой процедуры в свое русло, исключив из нее команду DEC А. Проще всего, конечно, забить ее нулем, который в переводе с языка машинного кода будет обозначать, что в этой ячейке просто нет операции (NOP), ну а на языке бейсика это звучит еще проще, - РОКЕ 46278,0. Теперь если вы вставите в загрузчик строку с таким выражением перед запуском игры, то сколько бы ваш герой в игре не убивался, у него все равно всегда будет 8 жизней, другими словами, вы его сделали бессмертным. Аналогично в игре выглядит и процедура, добав ляющая жизни при успешном прохождении определенного этапа игры:

ДЕЛИМСЯ

ld а,(48249) CP #08 ret nc and a inc a daa

ld (48249),a call 47988

Она сначала проверяет, не равно ли колличество жизней восьми. и если оно меньше этой цифры, то будет увеличено на единичку. Пусть не пугает вас команда DAA, - она нужна только для того, что бы подготовить число жизней к печати на экране подпрограммой, расположеной по адресу 47988. Такой же call 47988 вы найдете и после процедур, задающих и отни мающих жизни. Бывает еще два способа подготовки чисел к печати, -или же колличество жизней сразу задается на #30 больше, чем необходимо, как это сделано в игре WAR MACHINE ( ld а, #35), или же посредством добавления числа #30 до колличества жизней перед печатью ( ADD А, #30).

Теперь перейдем к более тяже лнм случаям, когда колличество жизней задается, минуя аккумулятор, или же отнимается не коман дои dec. Так, в некоторых играх, и, в частности, в c0rsari0s 2, колличество жизней задается через регистр hl процессора: ld hl.#05 и очень уж часто, особенно в играх фирмы ocean, жизни отнимаются посредством загрузки их колличества в этот регистр с последую щим убавлением:

LD HL.24851

dec(hL)

JP Р,25018

45314 45317

45319

45320

45321

45322

45323 45326

ОПЫТОМ

Это был фрагмент игры BATMAN 3. а в программе Р-47 the FREEDOM F GHTER такие же действия выполняются с перегрузкой значения из регистра в аккумулятор:

LD HL.29964 LD A. (HL) DEC -. LD aiL),A

Занимаясь обессмерчиванлем игр, вскоре вы столкнетесь и с ситуацией, когда при замене команд DEC А и DEC(HLT командой NOP после того, как вас первый раз убьют, компьютер выдаст сообщение V,GAME OVER'. Дело в том, что не всегда после каждой ошибки программа делает проверку колличества (ставшихся жизнеи посредством CP#00. CP#FF или OF А, часто бывает, что она делает это, проверяя состояние флагов. В таком случае необходимо пользоваться не инструкцией NOP, а применять

------- — однобайтовые команды

(HL), забивая ними А и DEC (HL) соот-Такое вы уже могли

____________ просматривая списки

0KES. где вместо значения 0 по адресу бессмертия заноситься 182 или 183.

А теперь с других, менее встречающихся способах. В игре NETHER WORLD, например, вы сможете обнаружить еще один метод, ко торым уменьшается колличество жизней:

33547 LD А.(65405) 33550 SUB #01 33552 LD (65405),А

Как видите, если по адресу 33551 занести число 0, то всегда будет отниматься по 0 жизней. Достаточно оригинален и метод убавления жизней с помощью SBC, как это сделано в игре SABRINA:

LD HL.(24618) PUSH DE EX DE.HL LD HL, #01 EX DE.HL AID A

вместо нее OR А или OR команды DEC ветственно. наблюдать.

SBC HL,DE

POP DE

LD (24618),A

Наиболее эффективно нарушить работу этого фрагмента можно, забив нулем инструкцию SBC HL.DE и единичку в команде LD HL.#01 Кстати, если бы этот фрагмент за канчивался инструкцией RET, являясь, таким образом, отдельной подпрограммой, то вместо_трех РОКЕ достаточно будет обоитись одним. поставив ту же RET (из бей-сика - 201) в самое начало этой процедуры, чтобы после обращения к ней командой CALL программа возвращалась, не сделав ни единого действия. Среди хакеров ценит ся именно таюи способ инйЬинити-зации", когда при наибольшей от даче обходятся наименьшим колли-чеством РОКЕ.

В сложных, тяжелых и, как правило, очень интересных играх часто все лимиты, в том числе и колличество жизней, хранятся в виде отдельной таблицы, выборка из которой производиться через индексные регистры. Так, в программе CASANOVA колличество жизней задается как LD (1Х+43),#05 и соответственно, убавление произ водиться командой DEC (IX+43), а в игре TERMINATOR 2 вы можете наблюдать такое явление: DEC (TY-5T.

В некоторых программах ход игры спланирован таким образом, что колличество ваших ошибок увеличивается и, при достижении оп ределен - ного значения, игра заканчивается. Такое мне впервые встретилось в игре HAMMER BOY:

LD А.(42097)

INC А

LD (42097).А

Кстати, в этой игре идет од новременный подсчет двух видов ошибок, - колличества непогашенных очагов и колличества проникнове ния врага на стены замка, и если хоть одно из них достигнет установленного предела, то придется начать игру сначала. Наращивание второго лимита производиться ана

L A,(42D98)

ПС А

LD (42098),А

Еще встречаются игры, в кото рых жизни отнимаю' ся не в одном, а в двух-трех местах. Это бывает необходимо, когда в игре разные виды ошибок отнимают разное колличество жизней или когда контроль над одним лимитом из одного Фрагмента невозможен Обычно найти такие места в программе не составляет большого труда.

Естественно, что после того, как хакеры начали "циклить" игры, программисты фирм-производителей начали принимать меры против такого вида деятельности. В подпрограммах, уме] ьшающих колличество жизней, начали применяться не документирован ые команды, как в игре TARGET RENEGADE или, например, сдвиг бит в байт , как это сделано в JUNGLE WARRIOR. Найти такие места в программе достатс -но трудно и ничего страшного, если вам не удастся этого сделать. Для примера я приведу методику обессмерчивания игры MAD MIX фирмы ТОРО SOFT. При ее исследовании мне не удалось найти участок, в котором жизни отбавляются, зато легко нашлись места, где задается их колличество и где ведется проверка этого колличества:

LD А, #03

LD (24624),А

LD А,(24624) AND А RET Z

Этого уже достаточно для того, чтобы ее обессмертить. Ведь проверка колличества жизней ведется каждый раз после того, как отнимается жизнь, а что, если вместо этой проверки снова занести в ячейку, хранящую колличество жизней, начальное их колличество? Тем более, что такая процедура будет занимать ровло столько места (5 байт), скольк занимает про1едура проверки. Проще всего, конечно, просто перебить место от LD А, (24624) в самом дизассемблере, а если из бейсика. то придется дать целых пять РОКЕ, последовательно занося в эти ячейки числа 62,04,50,58 и 96.Таким образом, заменив второй фрагмент процедуркой, точно копирующей первый фрагмент, можно достичь поставленной цели. Примерно так же пришлось сделать с игрой SABOTAGE и некоторыми другими программами.

ДЕЛИМСЯ

ОПЫТОМ

логично:

5. Бесконечное время, енергия. амуниция

Нередко во время игры возни кает и проблема с нехваткой боезапаса. - патронов, гранат, лазера и т.п., по другому все это называется амуницией. Обычно в программах процедуры по обслуживанию э их лимитов ничем не отличаются от работы с колличеством жизней. Например, в игре HAW 3T0RM перво начально вы имеете 50 патронов, исследуя ашин i код, можно лег ко отыскать место, где это задается, как обычно, - LD А,50 и затем отнимается через DEC А.

Работа по поиску адреса бесс-м ртия для ликвидации ограниения по времени также практически ничем не отличается от вышеизложенных методик. Несколько пр еров:

LD HL.43224

DEC (ftL)

RET NZ

Этс Фрагмент игры R0B0C0P 2 Как видите, в этом случае забыть о том, что существует лимит по „времени можно двумя способами, либо поставив вместо DEC (HL) инструкцию OR (HL). либо же просто RET. Вполне знакомая ситуация и с игрой The UNTOUCHABLES:

LD HL,25829

LD A, (HL)

SU 3 #01

DAA

LD (HL), A

Правда, если вы именно в этой игре исправите единичку на ноль,, го никогда не пройдете третии уровень, программа проверяет это1 Поэтому, после прохождения второго уровня, необходимо все снова вернуть на свое место. на этом этапе времени вполне хватает на вып п 1ение миссии, пр.'пемы только с энергией. Кстати, в игре The UNTOUCHABLES на каждом урсвне задаются разные лимиты, к тему же, это делается в самих подгруз-ках. оттуда же ведется и кон роль над ними, - как бороться с этим, будет рассказано ниже. Конечно, бывают и реже распространенные способы контроля над течением игрового времени, как. например, в irpe TERM NATI N.

LD HL, (57174) P SH fiL LD HL. #01 POP DE AND A EX DE.HL SBC HL, DE LD (57174). HL

Задается же время не всегда одним числом, часто бывает, что часы, минуты, секунды задаются тремя процедурками и хранятся в трех ячейках памяти К тому же, обязательно идет проверка на 60. ведь если исчерпаются, скажем, минуты, то должен отняться один час.

Ну и очень уж часто приходиться талкиваться с самым интересным видом ограничения, ене -гией. Начнем с самого простого вида представления энергии, числового, когда колличество эн( 1гии тображается как эольшое число, например. 1000 единиц. Такое вы можете наблюдать в играх сериала GAUNTLET или, скажем играх SHACKLED И CAt>ITAN TRDEN0 Естественно, что в таких случаях убавление энергии производиться аналогично:

LD HL, 58943 DEC (ftL) JP Z. 24042

Вот так это сделано в CAPITAN

TRUEN0. Может одновременно отниматься и несколько единиц енергии за одиг раз, как в программе TIME MACHINE•

LD А, (60499) SUB #03 LD (60499). A

Порой самым трудным является определить, сколько же единиц энергии задается в самом начале игры, ведь это не колличество жизней, которое выводиться на экран числом или соответствующим колличеством предметов, энергия чаще всего изображается в виде разноцветной полоски, длина кото рой постепенн уменьшается в зависимости от того, с каким успе хом продвигаетесь вы в процессе игры. Хорошо, конечно, когда эта полосочка состоит из отдельных сегментов, как в играх JUNGLE WARRIOR. FORGOTTEN WORLDS и WAR MACHINE, когда можно определиться по их колличеству, гораздо тяжелее приходиться, когда такой градации нет. А теперь рассмотрим самый распространенный метод контроля над колличеством энер гии. Для этого и пользуется команда SUB. позволяющая вычитать из числа любое значение. Дл; при мера неплохо подойдут игры сериала S-iRWOOD, каждый, кто пытался в них поиграть, знает, насколько это тяжело, впрочем, как и во всех остальных играх фирмы OPERA Задается колличество энергии как обычно, через аккумулятор ( LD А.48 ) и помещается в ячейку 59850, а отнимается при помощи следующей оригинальной подпрог раммьг

LD С, 2

LD А, (59850) SUB С BIT 7, А JP NZ,39989 BIT 7. С JR Z. LOOP CP 4fe

JR С, LOOP LD A, 48

LD (59850), A ^ JP 42272

LOOP LD (59850), А

Как видите, вычитание ведется при помощи SUB, причем, из общего колличества энергии вычитае гея столько единиц энергии, сколько занесено в С, таким образом, можно вычитать различное ее колличество. Это может быть необходимым. скажем, если по правилам игры различные монстры, нападающие на вас, должны забирать разное колличество энергии, такое ведь также встречается очень часто и такой метод делает игру более ин-ч ересной и приближеннои к реальности К тому же, вышеприведенная процедура проверяет, сколько осталось энергии, и если она полностью исчерпалась, то снова задает ее начальное колличество и возвращает игру к ее самому нечалу. Да, этот фрагмент дает много места для тво чества, - можю просто забить SUB С на NOP и быть всю игру бессмертным, можно пос тоянно засылать в С ноль, можно убрать контроль над оставшимся колличеством энергии и тогда, когда энергия полностью уйдет, вы всеравно будете продолжать играть. наконец, мс но исключить перезапуск программы, - будет очень интересно, когда энергия, после того, как вас убьют, сама снова мгновенно наберется и вы продолжаете играть с того места, ■де вас убили. Чтото подобное можно встретить и в игре TEENAGE MUTANTS HERO TURTLES:

LD A. (24422) LD В, A LD A. 16 SUB fe

А дальше идет проверка: LD A. (24422) OR A RET NZ

Самое интересное, что в этой про рамме с помощью одной и той же процедуры осущевствляется контроль за всеми четырьмя черепа иками, для нас это даже лучше, так как всю игру можно ' ацик-лить" одним РОКЕ. И еще одна особенность этой и некоторых других игр. В начале игры очевидным являет я только то. что есть необходимость исключить уменьшение энергии черепашек, но когда вы пройдете несколько первых уров ней, то появится еще один лимит. - время, за которое черепашки должны будут отключить все компь ютеры, значит, появится Heo6xoflt мость еще и с ним разбираться1 Или вот, например, в игре HUMAN KILLING MACHINE, после того, как вы ее обессмертите, первые уровни пройдутся без проблем. Но на последнем уровне.после каждого вашего удара по противнику, его энергия начинает сразу же набираться, он так быстро отдыхает", что вы не успеваете бить его настолько быстро, чтобы довести свое дело до конца! Придется снова запускать дизассемблер и искать, где же его энергия прибавляется с помощью инструкций типа ADD. И еще один нетипичный метод уменьшения энергии, я наткнулся на него в полной версии игры XEN0 :

Д Е ГИ М С Я

LD HL,52262

NEG

ADD A,(HL)

LD (HL),А

RET С

LD (HL),О

Или такой случай - при обессмерчивании игры C0RSARI0S 2 с числовым представлением энергии, я попытался было найти место в программе, где бы задавалось, что первоначально персонаж имеет 600 единиц энергии, как этз указано на экране. Поскольку ничего не п лучи юсь, я повниматэльнее присмотрелся к тому, как убавля ется энер -ия и заметил, что изменяются только первые две цифры, последний же ноль никогда не изменялся, как будто бы нарисован на экране просто для красоты". Через минуту мое предположение полностью оправдалось, так как нашлось LD HL.60. Еще через минуту игра была обессмерчена, а через полчаса полностью пройдена до конца.

ОПЫТОМ

6. IMMORTAL как самая

сильная форма бессмертия.

По сравнению с INFINITE LIVES. слово IMMORTAL (по-английс-ки: неуязвимость) появилось на экэанах наших мониторов совсем недавно. В 1992-м году в Англии )дними из авторов журнала Sinclai User была выпущена серия программ под названием Hacker Amazing, в них в удоЗной Форме рассказыва лось о CHEAT и POKES к некоторым игровым программам, среди всех инфинитов достаточно часто встречалось и это новое слово. Многие пользователи, испытав опубликованные- там IMMORTAL, были просто поражены их работой, после чего "забугорное" словечко прочно вошло в хакерский лексикон. Что же это такое?

Вы, наверное, заметили, что во многих играх, после того, как вас убьют, ваш герой появляется и при этом несколько секунд мигает, как бы под отавлива ;ь к дальней шим приключениям. Причем, пока он мигает, он неуязвим, то есть его не убивают никакие пули, не давят танки и он даже не тонет в воде. В некоторых играх за то время, пока ваш герой мигает, можно умудриться пропрыга гь несколько площадок, пройдя таким образом тяжелое место, на котором вас прошлый раз убили. А что, если сделать так, чтобы эта неуязвимость оставалась включенной на гротяже ии всей игры, только чтобы персонаж не мигал? Вот это и будет самый настоящий IMMORTAL. Но как его проконтролировать? Можно. Ведь время, которое персонаж игры мигает, тоже где-то задается и где то убавляется! Или же для этой цели выделяется отдельная ячейка памяти, про рамма обращается к ней и если там, скажем, ноль, то персонаж неуязвим а если единица, то игра переходит в нормальное русло. Вот пример такой реализации алгоритма изь наверное, самой распространенной игры BUB&LE BOBBLE:

43832 BIT Z, (IY+90)

43836 JP Z. 43998

ДЕЛИМСЯ

Эта процедура проверяет одну из ячеек в таблице и, соответственно, в зависимости от того, какое значение в ней находи ъся, определяет статус дракончика. Ее ли же заменить условный переход JP Z на безусловный JP и вывести проверку за пределы таблицы, например, вместо 90 дать 150, то вы больше не будете обременяться недоброжелателями при прохождении игровых уровней программы, вы станете прозрачными для врагов и они-ничего не смогут вам сделать. Немножко иначе выглядит фрагмент игры SOLOMON'S KEY:

49318 LD HL. (49813)

49321 LD A,L

49322 OR H

49323 JP Z. 49390

49326 LD DE. (43206)

49330 CALL 49356

49333 OR A

49334 RET Z

Снова-таки, если заменить ус ловный выход с подпрограммы RET Z на безусловный RET и, таким образом, отсечь часть подпрограм! ы, отвечающую за нормальный ход игры, то можно больше не отвлекаться на мешающих вра ов, снующих туда сюда, и сосредоточиться на самом логическом задании этой очень интересной игры. А в игре JACK the NIPPER 2 вообще по а -су 41218 находиться целая большая подпрограмма, осуществляющая вы--борку данных из ячеек памяти, отвечающих за условия столкновения персонажа с врагами, водой, стенами и т.п. Если в этих ячейках будет ноль, то он прозрачен для этого рода препятствий, если другое значение, то игра переходит к обычному режиму. Причем каждым видом препятствия занимается отдельная процедура и если заменить в этих процедурах проверку OR А на точное и жесткое определение X0R А, то можно настроить программу полностью по своему вкусу, например, оставить героя непрозрачным для врага, но разрешить ему прыгать, не разбиваясь, с лю бои высоты.

Все, приведенные мной, примеры являются наиболее сложными для поиска, гораздо чаще же можно найти амому IMMORTAL, если просто устранить отнимание времени, на протяжении которого персонаж неуязвим, а это может быть в программе сделано и самыми простыми способами, - через DEC А или SUB #01, как это имеется в играх F 1 TORftADO SIMULATOR и CABAL. И еще можно даже совершенно невзначай наткнуться на такой IMMORTAL,, забив случайно не то DEC А или поставив RET не там, где это действительно необходимо было сделать. Другими словами, разби-оаясь с этой, пока еще мало исследованной темой, места для вашего творчества больше, чем достаточно.

ОПЫТОМ

7. Другие POKES

Занимаясь обессмерчиванием игр, вы обязательно столкнетесь и с массой других, так сказать, параллельных проблем Например, чтобы проверить, правильно ли вы нашли РОКЕ к программам ST0RML0RD 2/2 и ST0RML0RD 2/3 необходимо будет каждый раз, прежде чем вас допустят к игре, набрать код доступа. Представьте себе, если в поле вашего подозрения находиться десяток РОКЕ, да к. тому же еще если при наборе пароля испытыва-ются трудности в его наборе из-за не совсем корректного опроса клавиатуры, не говоря уже о том, что и самого секретного слова вы попросту можете не знать... А что уже говорить о рядовом пользова теле, который даже не подозревает о том. что же там, во втором уровне SACRED SWORD, так как по честному проити до конца первый уровень очень затруднительно, а, значит, невозможни и узнать код для входа во вторую часть этой великолепной игры. Естественно, появляется желание что то изменить в программе, чтобы при входе б последующие уровни не запрашивался код. Что ж, ничего тяжелого в этом нет. Если вы прошли до конца игру FREDDY HARDEST 1, то. конечно же, заметили, что она выдает код доступа к следующей части. FREDDY HARDEST 2 же никакого кода не запрашивает, разумеется, она раньше делала это, но до нас дошла уже в таком виде. Примерно то же самое сделано и с программой REX 2, только изменения в нее внесены не жестко. ас помощью РОКЕ прямо в беи-сик-загрузчике. Давайте посмотрим, что делают эти РОКЕ 56046.0; РОКЁ 56047,0 И РОКЕ 56048,0. flpH дизассемблировании кодового блока игры вы увидите, что они забивают нулями команду CALL 56103. Именно по адресу 56103 и находиться подпрограмма, _запрашивающая код. Можно было обойтись и одним РОКЕ. - 56103,201. Примерно так же выглядит и запрос пароля в игре TITANIC 2, - просматривая начало программы, среди многочисленных CALL вы идите одну инструкцию JP. - она то и осуществляет пере ход на запрашивающую подпрограмму Оба вышеперечисленных примера относятся к способу запроса паро ля методом вызова подпрограммы. Есть и еще один способ, когда запрос делается непосредственно из самого основного цикла игры Например, старт игры TOI ACID 3 начинается с адреса 46077, и. сразу же после подготовительных процедур, в адресах с 46106 по 46242 расположена та часть прог раммы, которая приступает к запросу пароля. Конечно, если в этой процедуре немножко поковыряться^ то можно и с помощью одного РОКЕ "сбить ее с толку" так, что она будет делать запрос, но допустит вас к irpe в любом случае, как бы вы неправильно его не набирали. Можно обойтись и двумя РОКЕ, указав безусловным переходом JR на адрес, в котором эта процедура уже "не функционирует", пгав, i. это возможно сделать, только когда длина этой процедуры не превышает 127 байт, если же превышает, то можно задействовать три РОКЕ, указав ими JP на адрес перехода. Ну, и наконец-то, можно просто забить нулями весь этот участок.

ДЕЛИМСЯ

А что делать, если игра очень тяжелая, никаких кодов для входа сразу в любой уровень не запраши вает, но очень хочется посмотреть, что же там, дальше? Ну. если это подгружаемая игра, то особой проблемы тоже нет. особенно при работе с диском Иногда прос т достаточно переименовать вторую или, скажем, десятую подгруз-ку на первую и запустить игру, которая сама загрузит сразу же теперь уже десятый уровень, так как она ориентируется только на имя файла. Вспомните, самый первый раз такое вы видели в игре R TYPE версии Н. Родионова еще в 1990-м году. Конечно, часто этого самой игре может быть недостаточно, так как она проверяет содержимое загруженного уровня и, если оно не соответствует требуемому, попросит перегрузить его. Особенно часто это происходит с программами, подгрузки к которым имеют разную длину. В таком случае игру нужно заставить поверить в то. что ей подсунули именно то, что она хочет. Здесь тоже сложностей особых нет, - нужно найти ячейку памяти, в которую заноситься значение, обычно соответствующее номеру подгрузки, и изменить его на необходимое вам. Примерно так мне приходилось делать В играх BRONX и LA CORONA MAGICA. Можно и просто исключить саму проверку п да, в этом случае 100% го успеха я не гарантирую. При работе же с лентой можно попытаться, кроме всех вышеперечис ленных способов, загрузить любой уровень, "пришивая" к нему фаль-шхэдер от первого уровня, если все подгрузки оавнои длины конечно, Очень часто и в одноблоч-ных играх содержится определенного рода счетчик уровней, внося изменения в который, можно сразу перейти играть в следующий уро вень Еще раз ставлю ударение на то. что распространять программы с такими жестко внесенными изменениями недопустимо, в крайнем случае, если игра действительно очень тяжелая, можно предложить пользователю меню, пользуясь которым, он сам может определить, иг ать ли ему по-честному или перепрыгивать через уровни.

ОПЫТОМ

Нередки и случаи. когда, пройдя первую подгрузку, казалось бы. обессмерченной игры, во втором уровне игрок сталкивается снова с теми же лимитами или же к ним еще плюс добавляете* масса новых ограничений, либо же сама игра начинает идти совсем на другой лад, соответственно к ней ус танавливаются и новые лимиты. Таким образом, игра, как оказалось, не стала проходимее, просто человек, пытающийся ее обессмертить, не довел дело до конца или, того хуже, даже испортил ее. Так, например, дисковая версия The UNTOUCHABLES версии С.Скоробогатова не грузит дальше третьего уровня, так как он не смог ее проверить из-за больших трудностей в ро хождении. тем более, что все опубликованные РОКЕ для этой программы касаются только первого ее уровня и не действуют на остальных, так как каждая подгрузка этой программы это отдельная игра! И только обессмертив отдельно каждую подгрузку, удалось эту игру полностью дискетизиро-вать и дать возможность всем же лающим по-настоящему насладиться игрой в эту одну из лучших игрушек. Примерно такая же история и с играми GHOSTBUSTERS 2 ( кто из вас, например, мог подозревать, что трет и уровень этой игры -трехмерный с управлением однов ременно четырьмя персонажами ), SACRED SWORD ( третий уровень сильно смахивает на SAVAGE R0-B0Z0NE (третий уровень - почти как R-TYPE). LORNА (оказывается, девушка в этой игре не только бегает и дерется, но и летает на третьем уровне ), VIAJE CENTRO de la TIERRA ( на третьем уровне вы можете посражаться с настоящими доисторическими динозаврами ). и с десятком других игр.

ДЕЛИМСЯ

Еще одна проблема прохождения игр. - это когда после гибели ге роя вас возвращает на самое качало этапа... Конечно, скажем, в том же FREDDY HARDEST 1 это, мо жет быть, и не такое большое расстояние, а вот в TWIN WORLD после каждой гибели игра отрисо вывает, наверное, полподгрузки назад' или вот. например, каждый из вас читал в описании, что программа ZYNAPS состоит из 32 игровых уровней, видели ли вы, ну хотя бы, скажем, десятый,, даже с бесконечной жизнью? Давайте заглянем в нее "изнутри"-

ОПЫТОМ

PUSH AF LD А, #32 CALL 42670 CALL 34221 POP AF DEC A

LD KL,45329 CALL S7346 RET

Чутье нас не подвело, - если забить нулем изрядно приевшуюся вам инструкцию DEC А, то получиться, как в песне: "Ни шагу назад, ни шагу на месте, а 'олько вперед..." Короче, назад вы больше не вернетесь и после каждой гибели начнете свой полет с начала .. . следующего этапа! Правда, мне ке очень нравиться, что происходит пропуск такого большого игрового пространства, был бы гораздо лучше, если бы игра просто продолжалась после гибели точно с той точки, где вы так бесславно погибли. Давайте посмотрим, как мне удалось это решить в игре DRAGON BREED (R-TYPE 2):

29004 LD A.(32888)

29007 AND A

29008 RET Z

29009 DEC A

29010 JR Z,29016

29012 RET

29016 XOR A

29017 LD (32888),A

29020 LD 32801 ,A

29023 LD (32806),A

Как видите, эта процедурка распоряжается нашей судьбой, если случается столкновение, то она обнуляет координаты героя и он возвращается на исходную и, естественно, с исходным боекомп лектом Если же исключить условный переход ( адреса 29010 и 29011), больше никаких возвратов не будет, - вас убивают, а вы. погибая воскресаете и упорю движетесь вперед

ДЕЛИМСЯ

Еще одна "летающе-стреляющая" игра, SALAMANDER. Кроме того, что ее было не так-то просто обессмертить, еще и летательный аппарат в ней передвигается, как черепаха! Немножко поковырявшись в коде, удалось отыскать целых четыре замедляющих цикла типа:

LD HL,2000

LOOP DEC HL LD A, H OR L

JR NZ.LOOP

Теперь еще несколько экзотических РОКЕ, которые могут понадобиться. Вам, конечно же, хорошо известно, что игра DIZZY 3 будет считаться полностью пройденной, если вы собирете все монеты мно гие же жалуются на недостачу в одну-две монеты. А ведь можно сделать так, чтобы, начиная играть. у вас уже было пяток моне ток! Вы уже догадались. как? Просто в ячейку, хранящую, так сказать пустой карман занести число монет, соответствующее необходимому. Или вот еще одно направление работы, - адвентюрные игры. Ведь некоторые из них висят непройденными уже больше десяти лет! Конечно, я не призываю вносить в эти, специально гак задуманные, особо тяжелые игры, изменения, позволяющие набором любого глагсла проходить локацию, а вот, скажем почему бы ie прибавить своему персонажу немножечко энер гии. Сложность такого "цикле-ния" очевидна, - ведь в основной массе таких игр энергия, запасы и сила на экране никак не отображаются. Еще в литературе неоднократно приходилось встречать и POKES типа "игра без противников" для таких программ^ как NORTH STAR, FLYING SHARK. ЁX0L0N и т.п. Испытав их, я остался нед волен, гак как игра от этого вообще теряет всякий смысл. Да, лозунг "Не навреди!" достаточно актуален для такого рода деятельности.

Для тех же. кто не смог отыскать адреса бессмертия к некоторым играм, я пред ага небольшой списочек из POKES. найденных

ОПЫТОМ

ДЕЛИМСЯ ОПЫТОМ

мною. В него вошли только POKES к тем играм, к которым такая информация никогда ранее мне не встречалась опубликованной.

A.M. С. 1

lives) time)

39422. О 3095.201

2

40866. О 45068,201

lives) lives) lives) lives)

lives) ammo)

lives)

lives) ammo)

lives)

lives)

immortal)

ARKOS 1

52117.182

ARK0S 2

52126,182

ARKOS 3

51572, 182

BALLBREAKER 2

35874.182

BARBARIAN 2

40212,0 39883,182

BASE

51932.182

BATTLE CITY

30606, О 31568,0

BIG FOOT

55589.183

BOSCONIAN

33356.0

A.M. С.

lives) time)

BUBBLE BOBBLE 2 43835. 150: 43836,195

energy)

energy)

BUTCHER HILL 29564, 0 29576, 0 29612,0 29624,0 29657.0 30249,0

CASTLE MASTER 1 49471, 183. 52541,183

CASTLE MASTER 2 49030,183: 52103, 183

CHASE H.Q. 2

38334,0

EGG HEAD 2

58184,182

FALLEN ANGEL

28139,0

FAST FOOD

47844,0

FRONT LINE

62499.0

GALAXY FORCE

38278.0: 38279.0 47542,0

GAUNTLET

48489,201

HELL MASTER

32867,0

I,BALL 2

45392,182

KENDO WARRIOR 38342.0

KNIGHT FORCE

27959,0: 27960,0

KOLOBOK

26185.0

LA CORONA MAGICA 29563.0

LIBERATOR

51252.0

LINE of FIRE

42633.0

MEGA PHOENIX

41812.0

MURRAY MOUSE COP 64967,0

energy)

credits)

lives)

energy)

lives)

lives)

lives) energy)

energy) lives) lives) lives)

energy)

lives)

energy)

lives)

energy)

lives)

lives)

ДЕЛИМСЯ

ОПЫТОМ

mevi voryiaf-г PtfER BOV0|3>0

POTSViCR'g792,183

|°0692,183

^Jfl

11Й0Л83

robocop |969д82

405-n.l8<i

SHADOV1 Ot^f

SMASH ^32537.0 S»№E г4б840Д82

SOl51° ВЦ913,182 SPACE Hgf.is

STAR I,ljlo07C,0-

50011.0

(Immortal)

(lives)

(energy)

(energy)

(lives)

(ammo) (time)

(lives) (lives)

(lives)

i!®y)

(lives)

(energy)

(lives)

(lives)

(credits) (lives)

(lives) (lives)

STEEL EAGLE

32895,0 (lives)

STRIDER 1

39950,0 (lives)

STRIDER 2

33129,0:

33130.0: (lives) 33514,0 (immortal)

SWITCH BLADE

38430.201 (energy)

TECHNO-COP

37439,0 (time)

WAR MACHINE

43093,0 (lives)

42932,201 (energy) 46442,0 (gr; ades)

46728. 0:

46773,0 (ammo)

42708,0:

42722,0 (time)

48482,0:

48553.0 (keys)

W.D. W. 2

51847.0 (lives)

50833.0 (ammo)

Для тех же, кто давно занимается обессмерчиванием игр, счита ет себя очень крутым в этой от расли и теряется, что бы такого еще обессмертить, мо у посовето вать попробовать найти POKES к таким особо тяжелым для этого программам как TARGET RENEGADE, TURRICAN, SUPER ROBIN HOOD, HOSTAGES, ftEARTBROKEN. CAPITAN SE-VILLA, DIZZY DOWN the RAPIDS, OPERATION WOLF. CONTINENTAL CIRCUS, BRONX, ACTION FIGHTER, MACH 3t EDD the DUCK. RAMBO 3, 6EAR a GfcUDGE, JOE BLAbE 4, BLOOD BROT HERS. KRAAL. COMMANbO 4. RAINBOW ISLANDS. Желаю успеха!

Last Edition 04.04.1996 г. Сумы

РЕД. На этом цикл статей Александра Десятниченко не оканчивается (он предполагая прислать порядка 10 статей). Мы искренне надеемся, что Вы их прочтете.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Обмен опытом - настрока 5.25 дисководов.
scene intro - сценовое вступление.
Пати - Как Proхiма Hаckers Teам на FunTop'98 eздили.
Поздравления - С Hовым годом!
Вечный думатель - Открытое письмо издателям.

В этот день...   29 марта