Resource centre for ZX Spectrum games
using Manic Miner and Jet Set Willy game engines
Archive of the
Manic Miner & Jet Set Willy Yahoo! Group
messages
|
|
||
|
|
Message: 5390
Author: andrewbroad
Date: 02/01/2006
Subject: Rope-teleports (Re: Amazing new quirky feature ??? !!!)
Daniel wrote:
>I followed your instructions, but was unable to replicate the
> I have discovered an amazing thing happening in one of the rooms
> of Sendy's and mine "Jet Set Willy: Mind Control", which I think
> must be a new, truly esoteric quirky feature of the game engine -
> or a bug, perhaps? I did not consider it something that needed to
> be removed from the game before the final release; in fact, I
> think it's quite cool. But I am not sure how to explain in
> perhaps those of you who have technical knowledge like John,
> Andrew and the others could look into it.
>
> I actually thought I was experiencing hallucinations :-) , because
> I saw it happen two or three times, and then I couldn't repeat it
> any more. Before writing this message I played around a bit,
> though, and I think I have at least established how to repeat the
> phenomenon.
>
> Go to "Fresh air ain't always good 4 U" (096). Exit to the right
> so that you jump through an innocent-looking block (ILB) in the
> adjacent room (you need to start the jump in "Fresh air ain't
> always good 4 U" standing with your legs outstretched, to the
> right of the "4", with your left leg practically in line with the
> vertical line in "4"). Save a snaphot, because a badly-positioned
> jump will result in a multiple-death scenario! As you jump, hold
> the "Right" key - if you don't, you will experience a repeated-
> death scenario in "Playing with Yourself", where you will fall
> after going through the ILB in "A Little Room with a View".
>
> In "Playing with Yourself" (054), walk right dropping onto the
> platform below you, save a snapshot, and then make another classic
> jump through an innocent-looking block - in this case, the
> leftmost cyan-and-green Earth-cell sustaining the blue-and-yellow
> platform on which an item is sitting. The jump must be perfect or
> you will be trapped on that platform. After a successful jump,
> hold the "Right" key so that you can stand still on the conveyor
> and wait for the proper time to jump over the red flowerlike metal
> trap and the horizontal guardian moving on the left side of the
> platform on which you landed.
>
> Exit the room to the left, into "The Pool Table" (009) and... YOU
> WILL BE TRANSPORTED IMMEDIATELY teleported, sort of - INTO THE
> ROOM ABOVE (which is "Fresh air ain't always good 4 U"), and
> appear at the bottom of the room, in its central part, next to the
> entrance/exit downwards as if you had just entered this room
> from below!
>
> This should happen immediately after you enter "The Pool Table".
> If it doesn't, move left or right or jump and you should be
> teleported immediately.
effect. If you could provide a snapshot saved just before walking
into "The Pool Table", such that you can just walk left and be
teleported, perhaps I could analyse what's going on using SPECSAISIE
Compare.
> The trick doesn't seem to work if you jump through the ILB in "AAlthough ropes are an area of JSW that I don't understand 100%, I
> Little Room with a View", but don't jump through the ILB
> in "Playing with Yourself". It's hard to tell whether it would
> work the other way round, because you can only get on the platform
> from which you perform the jump in "Playing with Yourself" after
> entering the room from above, after jumping through the ILB in "A
> Little Room with a View".
>
> At first I thought that this weird phenomenon had something to do
> with the rope in "The Pool Table" and that it was an effect
> similar to the bug (feature?) which causes Willy to be caught by
> the rope no matter where he is in the room when an arrow hits the
> rope (first seen in the room "Into the sky" in Richard
> Hallas's "Join the Jet-Set!", TTBOMK) or when the rope hits a Fire-
> cell (as in "Money For Old Rope" in Phillip Bee's "Jet-Set Willy
> Ivy"). But after further investigation I am inclined to associate
> it more with jumps through ILBs, because I see no connection with
> the rope whatsoever.
>
> Can anyone explain why it happens? And if it is some kind of
> quirky feature of the game engine, could it be exploited
> consciously? If my speculations that it is related to jumps
> through ILBs are right (and they are just wild guesses), it would
> open incredible possibilities like having to perform a certain
> action in order to be carried into a secret room, or something
> like this.
don't see why it should have anything to do with having jumped
through an ILB.
If a rope collides with a pixel that was drawn before it (i.e. a
cell, Willy, or a guardian which precedes it in the room's guardian-
instance list), then the rope picks Willy up at the position of the
collision, no matter where Willy is at the time of the collision.
So if the collision happens near the top of the screen, Willy will
be `teleported' to the room above.
I have seen this bug in J4's "Burning Bridge" on my real Spectrum,
but am unable to replicate it for that room under RealSpectrum.
This bug can also be caused by placing the rope in an `invalid'
column, as I found when writing the room "WE PRETTY" and Party
Willy's "La Maison de Jet Set Dick", both of which feature non-
swinging ropes. I eliminated the bug by trial and error, without
understanding the rule for a valid rope-column.
In "The Pool Table" and "Burning Bridge", where I'm unable to
replicate the effect, the only thing that occurs to me is that a
memory-leak could have corrupted the room-data, with erroneous
pixels causing a collision?
"The Pool Table" and "Burning Bridge" have this in common: that the
rope is the /eighth/ guardian-instance in the room.
When you enter a room and it is copied into the current-room buffer
(32768-33023), the guardian-classes of the guardian-instances are
copied into an 8x8-byte guardian-buffer at 33024-33087.*
But a rope overwrites the /ninth/ byte of its guardian-class in this
buffer. So if the rope is the room's 8th guardian-instance, it will
overwrite the byte at 33088,* which is off the end of the buffer!
---
[* Each room can have up to 8 guardian-instances, and each guardian-
class is 8 bytes. But the JSW disassemblies say that the guardian-
buffer is 256 rather than 64 bytes, so correct me if I'm wrong.]
When data are written to incorrect addresses, they can come back to
haunt you much later, as in the Attic-Bug, or the jumping-off-the-
top-of-the-screen bug which corrupts Room 7 in Manic Miner.
--
Dr. Andrew Broad
http://www.geocities.com/andrewbroad/
http://www.geocities.com/andrewbroad/spectrum/
http://www.geocities.com/andrewbroad/spectrum/willy/
http://www.geocities.com/andrewbroad/spectrum/willy/collision.html
