Tidus79001 Posted September 15, 2017 Share Posted September 15, 2017 (edited) I am sure that others know of this as I have known about this trick since the game was originally released on the 2600 (not claiming to have found something new or relatively unknown), but I am curious if this was a bug that was never caught before the game was released or was intentional programming. I have found that Rhindle, the red dragon is not able to eat you eat when if you press yourself against the the top border of the screen and are positioned directly above his snout. Whenever you do that he will stay there pressed up against you until stop holding the directional control on your joystick to the up position (see embedded screenshot on this topic). Once you stop holding upwards holding the directional control Rhindle then will try to attack/eat you again, but until that point he is immobilized. Just a curious behavior that I have always wondered about as this trick will not work with the green (Grundle) or gold (Yorgle) dragons. Edited September 15, 2017 by Tidus79001 2 Quote Link to comment Share on other sites More sharing options...
Gray Defender Posted September 15, 2017 Share Posted September 15, 2017 That's pretty cool. I love tidbits like that. I am certain I probably ran into this during game play at some point and didnt think much about it. Thanks for sharing! Quote Link to comment Share on other sites More sharing options...
Tidus79001 Posted September 15, 2017 Author Share Posted September 15, 2017 If it is a bug I am curious anyone such as a ROM hacker has ever tried going through the source code to locate and correct it? Quote Link to comment Share on other sites More sharing options...
Tidus79001 Posted September 15, 2017 Author Share Posted September 15, 2017 Also I am curious if Rhindle has this same behavior on the Adventure II on the Atari Flashback 2. I would guess yes as my underderstandting is that they didn't build the ROM from scratch but hacked the original ROM and added to the existing code. Quote Link to comment Share on other sites More sharing options...
4ever2600 Posted September 16, 2017 Share Posted September 16, 2017 (edited) It's not a bug, it's a feature! Edited September 16, 2017 by 4ever2600 Quote Link to comment Share on other sites More sharing options...
Tidus79001 Posted September 16, 2017 Author Share Posted September 16, 2017 It's not a bug, it's a feature! I can't be the only one on here who has noticed this. I have know about this for 38 years. Quote Link to comment Share on other sites More sharing options...
4ever2600 Posted September 16, 2017 Share Posted September 16, 2017 Your not... I've known that for approx 38 years as well... Quote Link to comment Share on other sites More sharing options...
Tidus79001 Posted September 16, 2017 Author Share Posted September 16, 2017 Too bad Warren Robinett doesn't frequent the forums as it would be very cool to find out the answer to this. If I could ever be so lucky as to interview him about the game it would be on my list of questions Quote Link to comment Share on other sites More sharing options...
Nukey Shay Posted September 16, 2017 Share Posted September 16, 2017 Both the player and the red dragon move at 3-pixel jumps (i.e. their x/y positions are altered by +/- 3 pixels whenever their subroutiones are called). The yellow and green dragons move 2 pixels at a time. The reason that red gets locked is because of how the collisions are handled. Wall collisions are checked on every frame...the enemies, only 1 out of 3 (when their own routine is executed). When you collide with a wall, you are actually IN the wall for a frame. The collision is updated and the program bounces your sprite back in the opposite direction on the next 2 frames. First vertically (if applicable), then horizontally (if applicable). The red dragon subroutine is executed on this last frame. Dragon sprites follow your position by trying to match their horizontal and vertical positions with yours. Since the corrections to your sprite have already been applied, the red dragon sprite cannot collide with it...it's matching the "bounced back" position but the null collision was from the previous frame that had you stuck in the wall. The fix would have been to deal with the red dragon on one of the 2 earlier frames instead of the last one, I think. As noted, the yellow and green dragons don't have this problem, because they move 2 pixels vs. the player's 3. 10 Quote Link to comment Share on other sites More sharing options...
4ever2600 Posted September 16, 2017 Share Posted September 16, 2017 Believe me when I say that is absolutely the correct answer... 1 Quote Link to comment Share on other sites More sharing options...
Tidus79001 Posted September 16, 2017 Author Share Posted September 16, 2017 (edited) Both the player and the red dragon move at 3-pixel jumps (i.e. their x/y positions are altered by +/- 3 pixels whenever their subroutines are called). The yellow and green dragons move 2 pixels at a time. The reason that red gets locked is because of how the collisions are handled. Wall collisions are checked on every frame...the enemies, only 1 out of 3 (when their own routine is executed). When you collide with a wall, you are actually IN the wall for a frame. The collision is updated and the program bounces your sprite back in the opposite direction on the next 2 frames. First vertically (if applicable), then horizontally (if applicable). The red dragon subroutine is executed on this last frame. Dragon sprites follow your position by trying to match their horizontal and vertical positions with yours. Since the corrections to your sprite have already been applied, the red dragon sprite cannot collide with it...it's matching the "bounced back" position but the null collision was from the previous frame that had you stuck in the wall. The fix would have been to deal with the red dragon on one of the 2 earlier frames instead of the last one, I think. As noted, the yellow and green dragons don't have this problem, because they move 2 pixels vs. the player's 3. Wow, great explanation! Very detailed and technical but still understandable. How did you come about this knowledge? Did you read through the code or did you just notice it by a programmers trained eye? Just curious how hard it would be to change the Red Dragon subroutine to 2 steps. If it was changed to fix the behavior of the Red Dragon would he still react the same in game minus that issue where you can immobilize him? Edited September 16, 2017 by Tidus79001 Quote Link to comment Share on other sites More sharing options...
Nukey Shay Posted September 16, 2017 Share Posted September 16, 2017 By looking at the order of subroutine execution. Objects are handled on seperate frames because there's not enough time to do all of them on any single frame. The "bounce back" effect seperates vertical from horizontal on 2 frames so that the player is allowed to "slide" along walls instead of just bouncing back to his original position (this accounts for the wobble when you slide horizontally...the vertical position is updated first - if no collision results from that, no horizontal correction is necessary). A consequence from that design is *no* dragon executing on the 3rd frame can reach the player when you are colliding upward against a wall. A goofier effect plays out if you swap the red dragon subroutine with either of the slower ones (or change the speed of the red dragon to be 2 pixels)...the dragon will shift 2 pixels to the side repeatedly in a vain attempt to reach the player's co-ordinates. Probably why WR chose to put the red dragon there and not the yellow or green. A fix would be to throw something inconsequential in that 3rd frame, and move the red dragon on the earlier frame (swapping JSR MoveRedDragon with 1st frame's JSR Surround would work in the processor time allowed), but WR might have overlooked that. It still does not fix the problem of dragons not being able to eat a player colliding downward against a wall. When relying on hardware collisions only, this would need to be checked over the course of all 3 frames. However, doing that unfortunately breaks the player's "slide" effect which also relies on hardware collisions. To completely fix both quirks, only use hardware collisions for the player movement, and use relative positioning checks for dragon attacks - relative positioning is already in use for the bat to grab offscreen items, so WR obviously knew how to implement it. Whether he intentionally left these quirks in the game is anybody's guess. BTW the movement speed (or "delta") of the red dragon is set at address $F79E. Yellow and green deltas are at $F7B9 and $F7D4 respectively. 2 Quote Link to comment Share on other sites More sharing options...
Tidus79001 Posted September 16, 2017 Author Share Posted September 16, 2017 By looking at the order of subroutine execution. Objects are handled on seperate frames because there's not enough time to do all of them on any single frame. The "bounce back" effect seperates vertical from horizontal on 2 frames so that the player is allowed to "slide" along walls instead of just bouncing back to his original position (this accounts for the wobble when you slide horizontally...the vertical position is updated first - if no collision results from that, no horizontal correction is necessary). A consequence from that design is *no* dragon executing on the 3rd frame can reach the player when you are colliding upward against a wall. A goofier effect plays out if you swap the red dragon subroutine with either of the slower ones (or change the speed of the red dragon to be 2 pixels)...the dragon will shift 2 pixels to the side repeatedly in a vain attempt to reach the player's co-ordinates. Probably why WR chose to put the red dragon there and not the yellow or green. A fix would be to throw something inconsequential in that 3rd frame, and move the red dragon on the earlier frame (swapping JSR MoveRedDragon with 1st frame's JSR Surround would work in the processor time allowed), but WR might have overlooked that. It still does not fix the problem of dragons not being able to eat a player colliding downward against a wall. When relying on hardware collisions only, this would need to be checked over the course of all 3 frames. However, doing that unfortunately breaks the player's "slide" effect which also relies on hardware collisions. To completely fix both quirks, only use hardware collisions for the player movement, and use relative positioning checks for dragon attacks - relative positioning is already in use for the bat to grab offscreen items, so WR obviously knew how to implement it. Whether he intentionally left these quirks in the game is anybody's guess. BTW the movement speed (or "delta") of the red dragon is set at address $F79E. Yellow and green deltas are at $F7B9 and $F7D4 respectively. Again great information. Thanks for taking the time to reply. Honesty it doesn't really bother me the behavior of the Red Dragon as it was more is a curiosity than an issue (unless you go out of your way to intentionally perform this trick it doesn't really come into play). I am note suggesting the Red Dragon is broken or should be change as they game is perfect and his behavior is a quirk that I have enjoyed playing with for all these years. Still not going to deny it would be interesting to see the game with the fixes just to see how would respond once they are in place. I would try hacking those changes in myself but I don't know 2600 programming so that would be out of the question for me to even attempt. Quote Link to comment Share on other sites More sharing options...
djour Posted September 16, 2017 Share Posted September 16, 2017 Thanks to the whole thread for sharing info I never would have known. Quote Link to comment Share on other sites More sharing options...
Rhindle the Dragon Posted September 25, 2017 Share Posted September 25, 2017 Yeah, I never knew this about me. 3 Quote Link to comment Share on other sites More sharing options...
Video Posted September 25, 2017 Share Posted September 25, 2017 Maybe someone could mod it so the green or yellow dragon refresh every screen? Then you'd have three slightly different reactions to all the dragons Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.