Getting only
500 points when it says 800
After so many people have witnessed this happening, I finally
sifted thru all of the code and came across what everybody has
known for a while. There is a bug in the program that shows
the 800 sprite but only awards 500. This occurs when Jumpman
jumps 3 or more objects on the barrels stage. Here it is.
LD E,003h
; Routine = Award Points, 300 pts
LD
B,07Dh
; B = 300 sprite
RRA
; Was this award achieved?
JP
NC,L1E28 ;
Yes, go award points
LD
E,005h
; Routine = Award Points, 500 pts
LD
B,07Fh
; B = 500 sprite <---800 sprite!!! oops!
JP
L1E28 ;
Go award points
Now the big question is: Was it supposed to award 500
points or 800 points? And should it be
"fixed"? Head on over to Twin
Galaxies Forums to discuss!
More
Reasons why you're not getting your points!!!!
Deep in the code lies a routine that determines what objects
you've jumped over so that the game can award you
points. This check for objects is done when Jumpman
reaches the peak of his jump. At that point the code
spans a set area to see what objects are under you.
Normally the span will check 5 pixels to the left and 5
pixels to the right to check for objects. But, if
you're hold the joystick LEFT or RIGHT when this check is
being done, you can increase the span to 19 pixels to LEFT
and 19 pixels to the RIGHT. Try it!
|
|
What's with
the Kill Screen?
After the release of The
King of Kong, a lot of people have asked me about the Donkey
Kong Kill Screen at level 22. Here's why it happens:
The kill screen occurs because the bonus timer on level 22 is
loaded with an initial value that is too short to allow the level
to be completed. It's the result of using single
byte addition when calculating the initial Bonus Timer
value. The equation that the programmers used is:
BonusTimerThousandths
= Level Number * 10 + 40
Of
course the end value is capped if result is greater than 80.
See table below.
Level
Addition Result
Actual |
1
( 10+40 = 50)
5000 5000
2 ( 20+40 = 60)
6000 6000
3 ( 30+40 = 70)
7000 7000
4 ( 40+40 = 80)
8000 8000
5 ( 50+40 = 90)
9000 8000
6 ( 60+40 = 100)
10000 8000
7 ( 70+40 = 110)
11000 8000
8 ( 80+40 = 120)
12000 8000
9 ( 90+40 = 130)
13000 8000
10 (100+40 = 140)
14000 8000
...
19 (190+40 = 230)
23000 8000
20 (200+40 = 240)
24000 8000
21 (210+40 = 250)
25000 8000
22 (220+40 = 260)
400 400 |
The
error comes in on Level 22 because a single byte cannot be greater
then 255. The result then "flips" over to 4
(260-256). And there's your bug! Obviously the
programmers never considered that people would make it that far.
Does the Kill Screen occur because of the memory limitations of
the old games?
No, not really. This was really an oversight when the
program was written. It could have been avoided any number
of ways. Memory really wasn't an issue as there was empty
RAM and ROM available.
One way to fix the kill screen is to check for a carry after the
addition. If a carry was present you could skip any further
checks and just use the maximum value of 8000. Alternatively
one could do the maximum checking before the addition. That
way there wouldn't be a rollover.
There are many other (and possibly more simple) ways to calculate
the timer that would have worked and not had the kill screen
error.
What happens when the Kill Screen is fixed? Is there an
ending that can be reached?
There is no "final scene" programmed into Donkey
Kong. The game simply repeats the last level sequence
continuously.
|
Jumping
objects without being awarded points
Sometimes you can jump a barrel and receive no
points. Here is one way that I know that this can
happen. Points are awarded only at the peak of the
jump. When Jumpman reaches the peak of his
jump, the program takes a snapshot of the objects under
him. There is a narrow area under Jumpman that the
objects must be in in order for the points to be
awarded. Therefore it is possible to either jump
"too soon" or "too late" and not have
the object be within this narrow area when the peak is
reached. |
Why Billy's
High Score Read 999,000
The High Score in the center of the screen will track the player's
score during the game once the high score value is
surpassed. When Billy's score rolled over to 1 million, the
high score stayed at 999,000. There is a reason for
that.
The scenario was that Billy had 998,500 and was about to be
awarded 1,500 for completing a level. Normally one
would think that the addition would put his score back down to 000,000
and therefore the High Score in the center would stay at 998,500
because the player's score is now lower than the high
score.
The reason that it doesn't do this is because the BONUS timer is
awarded in two phases. The first phase of the addition
awards points 0-900 and the second phase of the addition
awards points 1,000-9,000. In Billy's case the first
phase awarded him 500, which moved the high score up to 999,000.
The second phase of the addition awarded him 1,000, which
kept the high score right were it's at.
And there you have it. The reason the high score stay at 999,000
is because of the two phases of addition that are used when
awarding the BONUS timer.
Thanks to Dave M. for observing this!
How high can
you go???
The score also has some limits. The highest displayable
score is 999,999. The reason for this is that the
programmers only reserved 3 bytes or 6 nibbles. Each nibble
holds one digit. It's kind of like rolling over an odometer
on a car.
Breaking the Rules!
And just for the record, the jump distance is THREE sections of
framework, not two like the instruction sticker says.
So get some whiteout and fix those stickers.
D2K uses these longer jumps as an
added challenge!
|
Taunt
or Programming Bug? You Decide!
Jumping on Kong's leg on
the Rivets level yields points. Some say it's a
"feature" but I say it's a bug. Read about
it here.
|
|
300
- 500 - 800. Are Points Really Random?
Getting big points
requires understanding of the game. To find out how
random points are awarded check here. |
|