ZX Power #03
31 декабря 1997
  Cheats  

Ликбез - CHEATS и POKES в игровых программах: история методов нечестной игры, фирменный CHEAT, использование опубликованных POKES, поиск адресов бессмертия.

CHEAT и POKES      в игровых программах. Александр Десятниченко, г.Сумы _________________________________________   Первая  публикация  -  журнал "ZX РЕВЮУКРАИНА",  1996г.  Новая, значительно до-полненная  и исправленная версия - специ-ально для журнала "ZX POWER", 1997г.   1. История методов "нечестной" игры.    Самые  первые игровые программы для ZXSPECTRUM  были достаточно примитивными и,соответственно,  сравнительно  легкими  вигре. Наверное, любой из вас cможет часа-ми играть в RIVER RAID, залетая очень да-леко  и обходясь при этом тем скудным за-пасом  дополнительных жизней, которым былнаделен  пилот  создателями программы. Но
по мере того, как совершенствовалась тех-
ника программирования, усложнялись и сами
игры.  Уже в 1985 году появились програм-
мы, игровое пространство которых насчиты-
вало от нескольких десятков до нескольких
сотен экранов. Это такие хорошо известные
вам  игры  как STARQUAKE, FIRELORD, ROBIN
in  the WOOD и многие другие. Значительно
увеличилось количество противников в игре
и  заметно возросла их агрессивность, на-
чались  вводиться  ограничения по времени
выполнения поставленной задачи и амуниции
главного персонажа. Возросли требования и
к  мозгам играющего, - теперь приходилось
держать   в   голове   карту   лабиринта,
раскладку  предметов  по  локациям  и при
этом  еще  подбирать  ключи к дверям или,
параллельно  со стрельбой по врагам, раз-
мышлять над применением предметов. Безус-
ловно, все эти факторы сильно повлияли на
темпы прохождения игр, которых начало по-
являться все больше и больше. Сами же иг-
ры становились все красочнее, начали соз-
даваться  так называемые FINAL CUT, - это
когда  в самом конце игры при ее успешном
прохождении демонстрировалось что-то типа
мультфильма с поздравлениями и теперь иг-
рающего,после каждого успешно пройденного
экрана,  начал мучить самый актуальный из
всех  вопросов,  -  а что же там, дальше?
Вот примерно в это время и появились пер-
вые  методы  "нечестной"  игры. В чем они
заключались?  Конечно  же,  в  устранении
причин,  усложняющих  игру,  и,  в первую
очередь,  это  касалось  лимита жизней, -
ведь  мало кому удавалось пройти огромное
игровое  пространство  с  пятью жизнями в
условиях, когда на тебя все время бросают
камни,  да  еще и выполнить при этом пос-
тавленную  задачу. Тот, кто хоть немножко
разбирался  в машинном коде, просматривал
листинг программы с целью найти в ней ад-
реса  ячеек  памяти,  в которых хранилось
количество  жизней, а также адреса, в ко-
торых  это самое количество уменьшалось с
каждой  гибелью персонажа, и вносил изме-
нения  в  текст  программы  то  ли непос-
редственно, то ли с помощью оператора PO-
KE  в бейсик-загрузчике. Позже списки та-
ких  POKES начали публиковаться в компью-
терных  журналах и у каждого пользователя
появилась  возможность  самому задавать в
игре  количество  жизней, необходимое для
ее  прохождения  или же просто ликвидиро-
вать уменьшение числа дополнительных жиз-
ней,  установленного  самой программой. К
тому  времени  загрузчики  уже достаточно
хорошо защищались, поэтому некоторые игры
"обессмерчивались"  внесением жестких из-
менений непосредственно в тело игры с по-
мощью  копировщика COPY-COPY (Pirate 02),
который  позволяет  это  делать. Именно в
таком  виде и дошли до нас такие игры как
ALIEN  8, NODES of YESOD, INDIANA JONES и
DIZZY.  Фирмы-производители игр мгновенно
отреагировали на такую наглость и наказа-
ли  пользователя  кодированием  основного
блока  игры.  Теперь уже, прежде чем "за-
циклить"  программу, ее требовалось взло-
мать  и раскодировать. Жестко обессмерчи-
вать  игры стали реже, все чаще это стало
делаться  из  загрузчика.  Начали  учиты-
ваться и интересы играющих "по-честному",
-  в  хаккерских  загрузчиках  перед POKE
ставилось REM, чтобы в обычном режиме иг-
ра работала нормально, а те, кто не укла-
дывается в лимиты, установленные програм-
мой,  мог  убрать оператор REM и играть с
бесконечной жизнью. Некоторые загрузчики,
перед  тем,  как запустить игру, задавали
вопрос:  "INFINITE  LIVES  (Y/N) ?", и, в
случае  утвердительного  ответа,  вносили
соответствующие  изменения.  Новым словом
было меню выбора режима игры. Впервые это
можно было наблюдать в программе NEBULUS,
позже  -  в  загрузчиках Билла Гилберта к
играм  KRAKOUT  2  и ROBOCOP. Появились и
первые  мегатрейнеры, - так называют меню
из   нескольких,   от   трех  до  десятка
пунктов, воспользовавшись которыми, можно
полностью  настроить все лимиты в игре по
своему вкусу, начиная от бесконечной жиз-
ни  и  заканчивая входом сразу же в любой
уровень  игры.  Первые такие мегатрейнеры
вы  могли  увидеть  в  играх SLAP FIGHT и
NORTH  STAR, особого же развития "инфини-
тизация"  программ  нашла  в нашей стране
благодаря  отсутствию закона об авторских
правах.  Сейчас  практически каждая прог-
рамма,  адаптированная к работе в TR-DOS,
снабжается если не мегатрейнером, то хотя
бы единичным POKE. А ведь есть еще огром-
ная  масса игр прошлых лет, так ни кем до
конца и не пройденных, а сколько есть но-
вых  игр,  пока  до нас еще не дошедших..
Многие  из вас могут сказать, что все уже
до  нас  дошло  и ничего нового больше не
будет.  А где же FLYING SHARK 2 (from FI-
REBIRDS'91),  SAVAGE  4 (from PROBE' 91),
MONSTRLAND  (from ROLLINGSOFT'91), SATURN
2  (from OCEAN'91), CHANGE TO NINJA (from
ULTIMATE'92),DEUCE (from DURELL'92), DARK
INSIDE   (from  DINAMIC'92),GRABER  (from
CEPPELIN'92),    HAND   TO   HAND   (from
U.S.GOLD'  92),  LETIFEROUS  (from IMAGI-
NE'92),  LITTLE ELEPH (from GOLD WIN'92),
NINJA IN FUTURE (from HIT PAC'92), SAVAGE
BARBARIAN  (from  MASTERTRONIC'92), TWILS
(from  CODEMASTERS'  92),  THE GEGG (from
KONAMI'92),   THE   ISLAND  (from  MIKRO-
GEN'92),  YAMAHA ISD (from ACTIVISION'92)
и сотни других игр? Видели ли вы их, ведь
достоверно  известно,  что  эти  игры су-
ществуют, есть даже их описания! Неоднок-
ратно на страницах различных изданий под-
нимался  вопрос о моральных аспектах бес-
конечных жизней. Я же, являясь плохим иг-
роком  и  поклонником  всех  методов  не-
честной игры, оставляю решение этого воп-
роса  на  совести  каждого и считаю своей
задачей  только  просто  ознакомить вас с
методиками  поиска  адресов бессмертия, а
как  ими  пользоваться, - то ли использо-
вать  только для себя, то ли встраивать в
свои загрузчики и предлагать в таком виде
широкому  кругу  пользователей,  -  пусть
каждый из вас определится сам.

           2. Фирменный CHEAT. 

   В  начале  "синклеровской"  эры ходили
самые  невероятные слухи о том, что в не-
которых  программах  есть  так называемые
"горячие"  клавиши, нажимая которые,можно
вытворять   такие   вещи,  как  проходить
сквозь  стены, перескакивать через экраны
и  целые  игровые уровни, обеспечить себе
бессмертие и неограниченный боезапас. За-
тем    постепенно    эти    мошенничества
(по-английски  - CHEAT) становились пред-
метом  все  большей огласки, и сейчас уже
каждый  школьник  знает,  что если в меню
программы  CYBERNOID  2  выбрать REDEFINE
KEYS,  а  затем, на запрос переопределить
клавиши  влево,  вправо  и т.д., нажимать
клавиши,  которые  в совокупности напишут
на экране слово "ORGY", то можно запросто
стать бессмертным. Очень интересные CHEAT
в  играх  сериала  DIZZY. Так, если после
загрузки TREASURE ISLAND DIZZY (DIZZY 2),
нажать  одновременно  клавиши Р, О и А, а
затем  ENTER,  то запустится такой CHEAT.
Теперь  в  любой  момент  в процессе игры
можно нажать клавишу C (при этом сам Диз-
зи  исчезает) и клавишами Z, X, K и М пе-
редвигать игровые экраны. Нажатие JUMP на
джойстике возвращает Диззи в этот выбран-
ный  вами  экран  и можно продолжать игру
уже с этого места. Еще круче устроен CHE-
AT в SPELLBOUND DIZZY 128К (DIZZY 5). Ес-
ли  в  титульной странице набрать "I WANT
AN  OMLETTE" (без пробелов, если не полу-
чится  с первого раза, то можно повторять
до тех пор, пока бордюр не заморгает), то
в  процессе игры при нажатии на клавишу С
на  экран вызывается целое меню с выбором
типа  CHEAT,  пользуясь  которым можно не
только двигать экранами, но и выбрать лю-
бой  предмет,  добавить себе звезд и жиз-
ней,  даже  сразу  спасти всех членов се-
мейства.  Практически все программы фирмы
OCEAN  имеют  встроенные фирменные CHEAT.
Например, если в таблице рекордов игр NA-
VY SEALS 1 & 2 набрать вместо своего име-
ни  фразу "CLUBBING SEASON", то, при зат-
руднении  в прохождении, можно нажать EN-
TER и перейти сразу на следующий уровень.
Практика   показывает,   что   абсолютное
большинство  CHEAT  активизируются  тремя
способами:  переназначением клавиш управ-
ления,  набором  кода  в титульном листе,
набором  кода  в таблице рекордов. Однако
бывает,  что программа на протяжении всей
игры  поддерживает  CHEAT,  - в игре IRON
SOLDIER  в  любой  момент можно сделаться
бессмертным,  нажав  одновременно клавиши
G,A,D.  Что  же это за CHEAT и откуда они
там взялись? Дело в том, что программист,
создающий  игровую программу, должен про-
верить  ее  работу и проверить не как-ни-
будь,  а  обойти все экраны,пропрыгать по
всем кочкам, поубиваться на каждом колыш-
ке...  Другими словами, он должен предус-
мотреть все возможные и невозможные вари-
анты  игры в каждом игровом экране, чтобы
программа  везде  правильно  отработала и
нигде  не  зависла,  не говоря уже о том,
что  он  должен  пройти несколько раз всю
игру  от  начала до конца полностью, убе-
дившись в ее нормальной работе и в дости-
жении  поставленной  цели.  Конечно,  от-
дельные  подпрограммы  можно  проверить и
под наблюдением монитора-отладчика, а вот
полностью  игру - только в том виде,в ко-
тором  ее получит пользователь. Разумеет-
ся,  не  каждый программист, даже если он
является  автором своей собственной игры,
может  быстро  и  легко  пройти до конца,
скажем,  NARCOPOLICE  со  всеми уровнями.
Поэтому, чисто для себя, программисты де-
лали  вот такие секретные CHEAT, набирали
после  загрузки  пароль  и проверяли свою
игру от и до. Почему же они не убирали их
после   окончательной   отладки?   А   вы
представляете,  что такое полностью гото-
вая  фирменная  игра  с  кучами защит? Не
так-то  просто  убрать  из  нее  фрагмент
программы,  особенно  если  он  сотни раз
"перексорен" и упакован вместе с основным
блоком  игры.  К тому же,спустя некоторое
время  можно  опубликовать  этот  CHEAT и
вызвать этим новый интерес к своей игре у
тех,  кто  ее не смог пройти раньше. Если
же  вам очень хочется пройти до конца ка-
кую-нибудь интересную, но тяжелую игру, а
ни CHEAT, ни POKES к ней вам не известны,
можно  попытаться найти такой CHEAT само-
му,  для этого даже знания ассемблера по-
началу  не понадобятся, потребуется хоро-
шая  программа-монитор  и  немножко вашей
интуиции.  Проще  всего  это  делается на
диске,  - декомпрессируется длинный кодо-
вый  блок  игры,  записывается  на диск и
просматривается  монитором на предмет по-
иска в нем текстовых сообщений. При рабо-
те с лентой, после декомпрессии основного
блока  игры, загрузите любой дизассемблер
и  запустите  его "на дамп". Просматривая
содержимое  памяти, особое внимание обра-
тите  на  текстовые сообщения, которых во
время  игры вы никогда не видели на экра-
не,  и,  если на глаза попадутся таковые,
запишите или запомните их. Чаще всего это
необычные  слова или фразы, намекающие на
CHEAT.  Так,  в  игре MIDNIGHT RESISTANCE
это будет предложение "I AM AN OCEAN TES-
TER",  сразу  же за ним расположена целая
подпрограмма, которую можно запустить ко-
мандой RANDOMIZE USR 28749, и она предло-
жит  вам  настроить игру по своему вкусу.
Найдя  такие необычные фразы, можно попы-
таться  набрать  их в титульном листе или
таблице  счета. Если ничего не получится,
а  подозрение на эту фразу очень большое,
то  придется  обратиться за помощью к ди-
зассемблеру с целью найти, где в програм-
ме идет обращение к этой фразе и что пос-
ле  этого  должно  произойти. И совсем уж
надежно  можно найти что-либо интересное,
просматривая  подпрограммы опроса клавиа-
туры. Ведь переопределением клавиш, опро-
сом   горячих  клавиш  во  время  игры  и
контролем  над одновременно нажатыми кла-
вишами  занимаются  именно такие подпрог-
раммы, и если вы найдете опрос клавиш, не
участвующих в игре, то наверняка это CHE-
AT.  Я  не  привожу практических примеров
того,  как  выглядит  опрос клавиатуры на
языке  ассемблера,  так  как сам применяю
5-6  способов такого опроса. Что же каса-
ется   программистов-профессионалов,   то
всех  пальцев  на  руках не хватит, чтобы
просто  только  перечислить методы, с по-
мощью  которых можно контролировать нажа-
тие нескольких клавиш, всего ряда или тем
более  единичной клавиши. К тому же,наде-
юсь,  каждый,  кто  собирается  самостоя-
тельно    обессмерчивать    игры,   имеет
представление об этом. Есть еще одна осо-
бенность,  которую  тоже  можно отнести к
теме  фирменных CHEAT, по крайней мере, в
рамках  этой статьи. Это касается кодов и
паролей,  которые  выдают некоторые прог-
раммы   после  прохождения  определенного
этапа  игры, например, игрового уровня, и
с  помощью которых впоследствии можно бу-
дет начать играть, пропустив уже пройден-
ные ранее уровни игры. Такие коды и паро-
ли  неоднократно  публиковались в печати,
обнаружить  их самому среди текстовых со-
общений  также не составляет особого тру-
да,  если они не закодированы, конечно. В
некоторых  программах,  например,  LORNA,
вообще  такие  коды  к уровням написаны с
пояснениями: "CLAVE ACCESO FASE 2: LOLI",
"CLAVE  ACCESO  FASE  3: PLANINGA" и т.д.
Очень  часто  пользователи жалуются, что,
зная  код,  они  не  могут его набрать, -
клавиатура опрашивается настолько быстро,
что  стоит только коснуться первой клави-
ши, как этой буквой мгновенно заполняется
все  пространство,  выделенное для набора
секретного  слова. Извините, мои дорогие,
но  в этом виноват ваш компьютер, - он не
"по-фирменному"   опрашивает  клавиатуру.
Конечно,  можно  повозиться  и переписать
процедуру опроса, но если вы только хоти-
те  просто посмотреть, что там, в следую-
щем  уровне,  а не выпускать эту игру для
широкой аудитории, то я могу поделиться с
вами  секретом,  как  "по-варварски"  бо-
роться с непослушной клавиатурой. Принцип
борьбы очень прост, - уж если ваш компью-
тер так резво выбивает целую строку одной
и той же буквы, так не препятствовать ему
надо,  а  помочь  в этом! Для этого снова
запустите  монитор,  который позволяет не
только  просматривать, но и редактировать
содержимое  памяти, и поменяйте код. Нап-
ример, если для второго уровня игры LORNA
был  код доступа LOLI, то вы его перебей-
те,  скажем, на 2222. Теперь, когда прог-
рамма попросит вас ввести код для загруз-
ки второго уровня, просто нажмите на кла-
вишу  2.  Послушная машина выбьет столько
двоек,  сколько  поместится  в отведенное
для  этого  место  на  экране, после чего
можно  смело  нажать на ENTER и загружать
второй  уровень.  Еще  раз хочу напомнить
вам,что распространять программы с такими
жестко  внесенными  изменениями ни в коем
случае нельзя, ведь есть люди, которые из
описания игры или из компьютерного журна-
ла  узнали коды доступа к уровням игры, а
войти  в них не смогут благодаря вашим, с
позволения  сказать,  "модернизациям".  И
еще  одно  замечание.  Код  доступа может
храниться в программе дважды, - в тексто-
вом  сообщении,  выводимом на экран после
успешно пройденного уровня, и просто само
собой,  - к нему и будет обращаться прог-
рамма для сравнения с кодом, который наб-
рали вы.

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

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

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

   За  период  с  1991-го  года  с  целью
обессмерчивания мною было исследовано по-
рядка  1000 игр, и я попытаюсь поделиться
с вами своими методиками поиска и успеха-
ми  на этом поприще. Итак, с чего начать?
Конечно же, в первую очередь нужно запус-
тить  саму  игру  и, убедившись в ее нор-
мальной  работе, немножко поиграть, обра-
тив  особое  внимание на такие вещи, как:
сколько   дополнительных   жизней  дается
программой, как это отображается на экра-
не, как эти жизни отнимаются и что проис-
ходит,когда  лимит  жизней  исчерпался до
конца.  После  этого  нужно  разобраться,
заглянув  в  загрузчик,  под какие адреса
загружаются файлы программы и как они за-
пускаются.  Если с этим возникают затруд-
нения,   то  сначала  загрузчик  придется
взломать и привести всю игру к такому ви-
ду,  чтобы она легко загружалась и запус-
калась из Бейсика командой RANDOMIZE USR.
Как это делается, вы, надеюсь, понимаете,
по  крайней  мере, это тема для отдельной
статьи  и  таких статей и целых книг было
немало. Пусть не обижаются на меня и зре-
лые  хакеры  за  то,  что  я так подробно
"разжевываю"  в своих статьях, по их мер-
кам,  порой  элементарные  вещи. Просто я
ставлю себе целью написать так, чтобы да-
же те, кто только вчера сел за компьютер,
прочитал, попробовал и незаметно даже для
себя  перешагнул  барьер между бейсиком и
машинным  кодом, потому что сам я начинал
осваивать ассемблер именно таким образом,
пытаясь  обессмертить строптивые игрушки.
Для  первого  примера  наилучшим  образом
подходит  какая-нибудь широко распростра-
ненная и в то же время достаточно трудная
игра,  например, STAR BOWLS. Как вы заме-
тили,первоначально  игроку  дается 8 жиз-
ней,  которые  очень  быстро впоследствии
убывают. Из загрузчика следует, что длин-
ный кодовый блок игры загружается под ад-
рес  26000  и запускается с адреса 34620,
предварительно  распаковавшись запуском с
начального   адреса  загрузки.  Загружаем
этот  файл (не забывайте перед этим уста-
новить CLEAR на единицу меньше, чем адрес
загрузки,  то есть 25999) и распаковываем
командой RANDOMIZE USR 26000. Теперь нуж-
но загрузить и запустить дизассемблер, но
как  же это сделать, ведь для этого нужно
больше 6 кБ памяти, а у нас она вся заня-
та   загруженным   и  декомпрессированным
длинным  блоком  игры? Но ведь не вся па-
мять  занята  машинным  кодом  программы,
ведь для игры требуется еще большое коли-
чество  графики,  музыки,  таблиц и т.д.,
которые  нам сейчас не нужны. Если же из-
вестно,  что  игра  запускается  с адреса
34620, то можно предположить, что от это-
го адреса и ниже до 26000 и располагается
вот  эта  ненужная  нам  пока информация,
значит,сюда  и загрузим дизассемблер. Ко-
нечно,  если  вы  работаете  с диском, то
можно  сразу  с  помощью монитора опреде-
литься,где  в  файле полезная информация,
предварительно  записав его в распакован-
ном виде, и совсем нет проблем с 128к-ма-
шинами,  позволяющими без накладок загру-
зить  и исследовать код с помощью замеча-
тельного  STELTH STALKER MONITORа. Запус-
тив дизассемблер, давайте попытаемся най-
ти в программе то место, где задается ко-
личество  жизней.  Классически количество
жизней  помещается  в аккумулятор и зано-
сится  затем  в  ячейку памяти, постоянно
его хранящую. Попросим дизассемблер найти
нам  мнемонику LD A,#08. Он мгновенно ос-
тановится на адресе 47805:

           47805  LD A,#08 
           47807  LD (48249),A 

   Теперь  становится понятным, что коли-
чество жизней постоянно хранится в ячейке
48249.  А что, если занести туда не 8, а,
скажем, 100 жизней? Для этого можно пере-
загрузить  длинный  блок, очистив память,
декомпрессировать   его   (RANDOMIZE  USR
26000)  и дать POKE 47806,100. Теперь за-
пустите саму игру (RANDOMIZE USR 34620) и
вы  собственными глазами увидите, что ко-
личество   жизней  значительно  возросло,
правда,  их  стало  почему-то  не  100, а
только  64...  Дело  в  том, что эта игра
распечатывает    количество    жизней   в
шестнадцатиричном  представлении,  и если
вам  понадобится 255 жизней, то на экране
вместо привычного числа 255 появится #FF.
Многие игры проверяют количество жизней и
не  печатают  на экране, если их, скажем,
больше 9. Игра BOSCONIAN, например, печа-
тает  количество жизней в десятичной фор-
ме, но под это количество на экране выде-
лено только два разряда и если вы задади-
те  ей больше 99 жизней, то после первого
же  столкновения получите GAME OVER. Есть
игры,  которые отображают количество жиз-
ней  не  числом,  а соответствующим коли-
чеством  предметов,  например, количество
жизней в игре ROBOCOP соответствует коли-
честву  голов Робокопа в нижней части эк-
рана.  Представляете, что будет, если за-
дать их больше, чем предусмотрено? Конеч-
но,  если программа проверяет это, то от-
секает  лишние,  а если нет? Тогда в LAST
NINJA  2  программа  при распечатке коли-
чества   оставшихся   жизней   попытается
выстроить  в  одну шеренгу 255 ниндзей, а
игра  MURRAY  MOUSE  SUPER  COP попробует
разместить в пределах экрана 255 мышей. К
тому  же,  даже  такого  огромного запаса
жизней не всегда может хватить для успеш-
ного  завершения  игры, - я, например, не
уверен, что на двадцати семи уровнях игры
SPACE  HARRIER  2  меня  убили меньше 255
раз.  По  всем этим причинам такой способ
решения  проблем  с количеством жизней не
только  не нашел распространения, но он и
нежелателен.  Гораздо красивей и надежней
работают   POKES,  устраняющие  убавление
жизней.  Поскольку обычно за один раз от-
нимается  только  одна жизнь, то наиболее
вероятнее, по-видимому, применение коман-
ды  DEC  для  этой цели. Давайте вернемся
снова к STAR BOWLS и проверим это предпо-
ложение. Как мы уже знаем, для постоянно-
го  хранения  количества  жизней  в  этой
программе выделена ячейка памяти по адре-
су  48249.  Попробуем  отыскать фрагмент,
где  бы шло обращение к этой ячейки памя-
ти,  например,  через аккумулятор. Дизас-
семблер выдаст:

          46275  LD A,(48249) 
          46278  DEC A 
          46279  DAA 
          46280  LD (48249),А 

         Продолжение следует... 
_________________________________________




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

Похожие статьи:
Заключение - авторы и т.д.
B.B.S. Новости - О работе B.B.S.'ок.
Веселый Гиннес - Забавные рекорды.

В этот день...   23 сентября