F
 
  Site Map | Contact Info | Home  
  
 Home
Products
 
Kangaroo FREEPLAY
   Dragon's Lair Enhancement
   Space Ace Enhancement
   Phoenix FREEPLAY
   Frogger FREEPLAY
   Donkey Kong Foundry
   DigDug FREEPLAY
   D2K Jumpman Returns NEW
 ROMHACK Toolbox
 Ordering Info
 Code Disassembly
 My Gameroom
 Links

 

 
Main | Technical | Foundry | Behind the Hack  
Play the new game...   

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.


 

HOME  

 ROMHACK 2016