CHEAT and POKES
in game programs
Part 2
(C) 1996-99, Alexander Desyatnichenko
__________________________________________
Thus, our assumption is justified. DEC A team at 46,278
number of lives decreases by one
then again sent to the permanent
storage in cell 48249. Well, let's try
guide the work of this procedure in its
channel, deletion of the command DEC A. The easiest way, of
course, to score a zero, which is translated to machine
language code will be mean that in the cell during the program
will not run no operation (NOP), well, the language
BASIC it sounds even easier - POKE
646278.0.
Now, if you insert a boot
line with an expression before launching
Games team RANDOMIZE USR, how much
would be your hero in the game did not die, it all
will still be in stock 8 other lives, other
words, you make him immortal. Similarly, the game looks and a
procedure that adds life with a successful game:
45314 LD A, (48249)
45317 CP # 08
RET NC 45319
45320 AND A
45 321 INC A
45322 DAA
45323 LD (48249), A
CALL 45326 47988
Rostral first checks to see if the number of lives of eight,
and if it less, there will be increased by one team INC A. Let
no team scares you DAA, - it is needed to prepare a number of
lives to print on the screen subroutine
located at 47988. Takoy same
CALL 47988 you'll find and post-treatment,
defining and consuming lives. Commonly used are two ways to
prepare the numbers for Print: or the same number of lives once
given the # 30 more than necessary, as done in WAR MACHINE (LD
A, # 35), or by adding the number # 30 to the number of lives
before printing (ADD A, # 30).
In many games, given the number of lives, bypassing the
battery, using the register HL. So, in a game CORSARIOS 2 is
done so: LD HL, # 05. Often decrease the life also produced
through the same Register:
LD HL, 24851
DEC (HL)
JP P, 25018
It was a piece of game BATMAN 3, and
Program P-47 the FREEDOM FIGHTER used the combined method:
LD HL, 29964
LD A, (HL)
DEC A
LD (HL), A
Pursuing obessmerchivaniem games soon
you come with such a situation, when
scoring zero command DEC A or DEC (HL),
at the first pogibanii program will
a familiar message: "GAME OVER". The point
that many of the program immediately after
make grabbing the flag checking, and NOP command in that case,
let the program in the wrong steppe. In this case, and, better
yet, in any case, instead of NOP to be used single-byte command
OR A and OR (HL), respectively. This you may have
observed by looking at lists POKES, where
addresses instead of zero is entered 182 or
183.
And now the other, less spreading of ways. The game NETHER
WORLD, for example, you can find another way dec lives:
33547 LD A, (65405)
33550 SUB # 01
33552 LD (65405), A
In this case it is sufficient instead of # 01
put # 00 and let them take at zero lives every time.
Sufficiently original method of taking a life by using the SBC,
as is done in the game SABRINA:
LD HL, (24618)
PUSH DE
EX DE, HL
LD HL, # 01
EX DE, HL
AND A
SBC HL, DE
POP DE
LD (24618), HL
Disrupt the normal operation of such a fragment is more
difficult, but it is also possible, for example, scoring zero
in the SBC HL, DE and yedinichku in LD HL, # 01. By the way,
sometimes it happens that such podprogramy end directive RET
and called from the main program's through CALL. Togda simpler
way - supply RET (from BASIC - 201) in the same
beginning of a subroutine CALL to here
how come, so with nothing and left without doing any edinigo
action. Among hackers is valued precisely this way infinizatsii
games when a small Number POKES achieved the highest returns.
In the complex, difficult and, as a rule,
very interesting games often all limits in the
including the number of lives are saved in
a separate table, the sample from which
made through the index registers.
Thus, the program CASANOVA number of lives given as LD (IX
+43), # 05 and, accordingly, diminish as the DEC (IX +43), a in
the game TERMINATOR 2, you can watch phenomenon: DEC (IY-5).
Often these plates are kept separate and after the GAME
OVER LDIR holds her to a job
as is done in PRINCE CLUMSY or RETURN
of the JEDI:
LD HL, 54079
LD DE, 54059
LD BC, 20
LDIR
And shortly after taking a life itself:
LD HL, 54059
LD A, (HL)
OR A
SCF
RET Z
DEC (HL)
In some programs, events
planned in such a way that the number of
errors with every bad case of increases and, when reaching a
certain value the game ends. For the first time I have a I saw
the game HAMMER BOY:
LD A, (42097)
INC A
LD (42097), A
Incidentally, in this game, counting errors in a similar way
is in two places and if even one of them reaches the limit,
you'll need to start playing again. Similar kind of methods are
also applicable in cases where control of one and the same
limit of one and the same fragment program is not possible or
if the various Error consuming different amounts of lives.
It is natural that after the hackers
began to "cycle" of the game, the programmers
manufacturers have begun to take action
against such activities. In
routines that reduce the number of lives
began to be applied, as in a game TARGET RENEGADE, undocumented
commands, or as in JUNGLE WARRIOR, a shift of bits in a byte.
Find things much harder, and that
can you say, if you make a good coder
pose the problem to taking a life
so that no one has found, I think
many would have coped. In such cases, you can go for a trick
and do something another. So, once I could not find
taking a life in the game MAD MIX, but easy
found a site where to set the number of lives and a fragment,
where there was a check remaining values are:
LD A, # 03
LD (24624), A
.....
LD A, (24624)
AND A
RET Z
Even this was enough to her
immortalize, because each test is
times after once they take away life. A
What if instead of checking to do again
entering in the 24624 C grade? Especially because
such a programm will occupy as
proverochki program, the same five bytes. So the game will now
take life, but immediately after that, instead of
test, install all of the same three lives.
5. Infinite time, weapons, energy.
It frequently happens that in the heat
quickly shoot all the ammunition,
and then suck his finger, until they kill. Naturally, there is
a desire to do it all infinitely eternal. Well, that complex
nothing, especially as it is done roughly the same methods. For
example, in the game HAWKSTORM you are given 50 rounds.
Exploring native code, it is easy to detect LD A, 50, and then,
respectively, and cherished DEC A.
Time is also often given, and
subtract the standard, that's how it looks in the game ROBOCOP
2:
LD HL, 43224
DEC (HL)
RET NZ
But in some cases and harder when the hours, minutes and
seconds are set, checked and subtracted (or increase)
separately. Well, very very often faced with the most
interesting kind of limits - of energy. Let's start with the
simplest form of the representation of energy - a numeric,
when the energy is displayed as a large
number such as 100 or 1000 units. This can be seen for example
in the game CAPITAN TRUENO, but, once again, everything is
standard:
LD HL, 58943
DEC (HL)
JP Z, 24042
In contrast, the number of lives, often
subtract several units of energy,
as in the game TIME MACHINE:
LD A, (60499)
SUB # 03
LD (60499), A
Sometimes the most difficult task is
determine how many units of energy is our character at the
beginning of the game to from what was then danced in the
search process. Because energy is often displayed on screen in
the form of stripes. Well, if it consists of individual
elements and their like in Game FORGOTTEN WORLDS, for example,
can count. But when such a gradation is not,
on that just do not have to hope -
take it slowly when killed, through the
how many strokes will Khan or, say,
estimate for the pixels around, and
then try to find something like that ...
Well, now the most extended ones method of grabbing power of
games in the series SIRWOOD. So, it was possible to determine
what was originally given 48 units of energy and stored it is
in the 59850 cell, subtract the same with the command SUB:
LD C, 2
LD A, (59850)
SUB C
BIT 7, A
JP NZ, 39989
BIT 7, C
JR Z, LOOP
CP 1948
JR C, LOOP
LD A, 48
LD (59850), A
JP 42272
LOOP LD (59850), A
How to see a number of drifting
takes energy, it is subtracted from A
with subsequent testing. This grabbing
has many advantages, because you can deduct different amounts
of energy. Such it may be necessary when, for example, requires
that different kinds of monsters of varying strength applied to
the hero of damage. Agree, it makes the game more attractive
and realistic. In principle, this subroutine provides plenty of
space for your Creativity can be for her to pick up a few
different POKES and each will sell its infinite life, well,
very simple here, of course, just score zero command SUB C.
Something like this found in Teenage Mutant Ninja Turtles
(TURTLES):
LD A, (24422)
LD B, A
LD A, 16
SUB B
Moreover, in this game one program
subtract the energy of all four turtles
which is certainly convenient in terms of obessmerchivaniya.
But when you try to pass further, you will have another limit -
time during which the turtles must have time
turn off all computers, so have
"Cycle" is now more and his! Do not be surprised, like you find
a good yet many, especially in games where each
a new level a new job. Or here's another
situation - in the game HUMAN KILLING MACHINE
after you immortalize it, the first
levels will walk easily, but then at the last level, after each
of your stroke the enemy as quickly rests, that you do not
have time to knock him this energy! Hence,
will have to find a place where it is added
energy and eliminate this surprise.
And here is an atypical case of grabbing power from the full
game XENON:
LD HL, 52262
NEG
ADD A, (HL)
LD (HL), A
RET C
LD (HL), # 00
Is sufficiently original to work with
energy in the game BRONX:
LD A, (64813)
XOR (IY-107)
LD (64813), A
Again, the games of ATLANTIS SOFTWARE
(SHOW BROTHERS), written at some
macro language and compiled into machine
code. All limits are given here in terms of HL, and
protsedurkoy handled working with
memory cell in which this limit is stored. Enough to put there
RET, to immortalize one reception all the limitations.
And yet such zamorochki. The game CORSARIOS
with the numerical representation of energy, according to the
screen is given 600 units. Digging in
program failed to find a place to
featured a number. After playing a little more closely and
looked closer to the way diminish the energy, I noticed that
enabled only the first two digits, and Last zero there like a
beauty ... A minute later my assumption is justified since
found LD HL, 60, and more a minute later the game was already
in obessmerchenom form.
6. IMMORTAL as the most powerful form of
immortality.
Compared with INFINITE LIVES, word
IMMORTAL (invulnerability) appeared in the lexicon sinkleristov
not so long ago. In 1992, in England was released programm
HAKER AMAZING, which contains numerous POKES and firm cheats,
among whom there were also a new word. Many users experienced
published there IMMORTAL, were simply amazed by their work,
then this concept is firmly stuck in our own midst. Remember,
VN Rodionov in the game R-TYPE called this mystical POKE?
What is it? You've probably seen
how many games, after your hero uhryukayut, he appears again,
but while a few seconds pomigivaet, though preparing for new
adventures. Moreover, until it blinks, it is virtually
invulnerable that is, it does not take a bullet, do not press
the tanks, and sometimes he did not even sink in water. Who
porastoropney, that in those seconds could even contrive
proprygat several sites, passing thus difficult place,
thing, where your hero is honored to be murdered last time. But
what if you do, so that the character of all time, the game
became so invincible, only to not pomigival? This is what will
be the most that neither is IMMORTAL! But how do I find it? You
can, for the time that the character pomigivaet somewhere is
given and taken away. Here's an example, perhaps the most
famous games BUBBLE BOBBLE:
43832 BIT Z, (IY +90)
43836 JP Z, 43998
Time of invulnerability is stored in the plate
go check it and if we replace JP Z by
JP and put the number instead of 90 150 (in the
cell is always what we need now)
You can easily become invulnerable. And now, a fragment of
SOLOMON'S KEY:
49318 LD HL, (49813)
49321 LD A, L
49322 OR H
49323 JP Z, 49390
49326 LD DE, (43206)
CALL 49330 49356
49333 OR A
49334 RET Z
If this fragment to replace the conventional
RET Z output to a cardinal, and RET,
thus cutting off part of the program responsible for handling
the collision with the enemy, there would be more on them
distractions and concentrate on the logical specification of
this very exciting game. And in the game JACK the NIPPER 2 to
address 41218 is an entire subroutine is responsible for the
conditions of the collision with the enemy, water and the walls
and if these protsedurkah substitute for solid OR A XOR A, then
we can customize the program completely on your
taste, such as jumping, no breaking, with
any height.
Now the main principle of the search invulnerability. So,
you first need to find where in the game away the life and then
watch from the this place higher, figuring that perform those
portions of programs that worked before take life. So you can
find a fragment, where the collision is being processed, and
then let him in your scenario. Usually have to do
RET to a subroutine or circumvent it,
putting an unconditional JR. Sometimes, though,
is sufficient, as in CABAL, scoring zero DEC A, or, as in F1
TORNADO SIMULATOR, fix SUB # 01.
the end of the second part
__________________________________________