Jump to content


Photo

'Don't Mind Your Head (While Walking Left)' Bug Fix for JSW


  • Please log in to reply
42 replies to this topic

#11 IRF

IRF

    Advanced Member

  • Contributor
  • 3,692 posts

Posted 22 April 2016 - 06:32 PM

Incidentally, this might have allowed him at that stage to walk rightwards through an Earth cell at head height, although I didn't test that.


Actually, he might be able to do that with the 'perfect patch' in place (i.e. the patch as it is now that I've corrected it), if the game is restarted whilst he's in mid-jump (and the jump counter remains at a certain value). Ditto when walking left!

With the 'imperfect patch' (as it was before I 'fixed the fix'!), he could probably have walked rightwards* through an Earth cell at leg-height, provided there was no Earth cell underneath it!

*(But only rightwards, because I only cocked up the 'Move right' element of the new code.)

Edited by IRF, 22 April 2016 - 06:34 PM.


#12 IRF

IRF

    Advanced Member

  • Contributor
  • 3,692 posts

Posted 22 April 2016 - 11:58 PM

There is a residual problem with the Bug Fix.  See the attached rzx recording, with starting point set to the Swimming Pool.

 

You will see that at the start of the game, Willy is blocked from walking through an Earth cell at head height in either direction.

 

He then jumps onto the rope (presumably catching onto it when the Jumping Animation Counter has reached a value of either #0c, #0f or #11), and climbs up to emerge in The Orangery.

 

He can then walk left or right through Earth cells at head height - because the Jumping Animation Counter still retains a value that means the Move Willy (3) routine bypasses the check for Earth cells at head height (on either side of Willy).

 

Finally, he jumps up and down on the spot, after which he cannot walk left or right through the head-height Earth cells (because jumping resets the Jumping Animation Counter to zero, and then it progresses through to a value of 18 at the end of the jump - not a value which causes the CP (HL) command to be bypassed in the code).

 

This all happens within the same game, without restarting (although it doesn't happen every time Willy jumps onto the rope; it depends what stage he has reached in the jump when the rope intercepts him).  So initialising the Jumping Animation Counter at #85D5 to zero at the start of every game wouldn't necessarily iron out this latest 'crease'.

 

However, I was thinking that a bit of code in the Main Loop might do it, as follows:

 

Load up the Airborne Status Indicator at #85D1.

Check: is it '1' (meaning that 'Willy is jumping')?

If not, then reset the Jumping Animation Counter at #85D5 to zero.

(But if the Airborne Status Indicator does have a value of 1, then the command which resets the Jump Counter to zero is bypassed via a relative jump.)

 

What do you think?



#13 andrewbroad

andrewbroad

    Advanced Member

  • Contributor
  • 50 posts

Posted 23 April 2016 - 01:02 AM

I think it would be better to check for Earth cells at head height when walking, but not when jumping, as this would retain a spectacular class of quirky features.

So the following features would be removed...

  • walking left through Earth cells at head height;
  • walking up through overhead Earth cells on ‘\’ ramps;

...while the following features would be retained...

  • jumping left through overhead Earth cells;
  • jumping left onto ledges with overhead Earth cells, as in “The Wine Cellar”;

...and the following features would be added:

  • jumping right through overhead Earth cells;
  • jumping right onto ledges with overhead Earth cells, as in “Emergency Generator”.

 


  • IRF likes this

Dr Andrew Broad


#14 IRF

IRF

    Advanced Member

  • Contributor
  • 3,692 posts

Posted 23 April 2016 - 07:38 AM

That's another possibility I suppose, although it's a bit more 'in defiance of the natural laws of physics'.

When Willy jumps onto a ledge underneath an Earth block, his 'physical presence' (2x2 cell) is only inside the Earth block for a single time-frame, before being ejected one cell-row downwards (by the same bit of code that causes the ILB effect, at 36540). Furthermore, at that instant he is in animation-frame 0 (when moving right; or 3 when moving left), so his filled-in sprite only occupies the 'back column' of his 2x2 cell, and there is no pixel overlap with the Earth block.

As a result, it looks like he has just been caught by the edge of the ledge - which he has, but without the patch in place he doesn't end up there because the physics of jumping moves him on both horizontally and vertically in each time-frame.

****************

Note that in Emergency Generator in the classic game, he can pass through the Earth cell 'ledge' underneath the top-right cavity, if he jumps from a lower position within the right-hand chimney stack (i.e. from one or two cell-rows down, but not from the top of the Water cell stack). But then there is nothing to catch him as he falls through the Earth cell, so he still falls to his death (or possibly hits the vertical column of Fire cells?)

However, if there was an Earth block located immediately to the left of the uppermost Fire cell (underneath the existing 'ledge'), then he would get caught by it, and end up standing inside the 'ledge' Earth cell (probably in his 'legs together frame of animation). He could then jump straight up by one cell-row, and walk right to emerge in Priest's Hole!

Edited by IRF, 23 April 2016 - 09:52 PM.


#15 IRF

IRF

    Advanced Member

  • Contributor
  • 3,692 posts

Posted 23 April 2016 - 07:53 AM

It is also impossible for Willy to jump into a cavity that is two cell-rows high that is sited at a height lower than his starting position (again, this is how it should be; once he has dropped to a position that is lower than the start of his jump, then he is no longer jumping but falling, and has lost all horizontal momentum).


I've just added the above point to post #3, but I thought it worth emphasising in case people don't notice the edit.

Edited by IRF, 23 April 2016 - 08:04 AM.


#16 IRF

IRF

    Advanced Member

  • Contributor
  • 3,692 posts

Posted 23 April 2016 - 08:19 AM

I think it would be better to check for Earth cells at head height when walking, but not when jumping, as this would retain a spectacular class of quirky features.

  • jumping left through overhead Earth cells;

Andrew, am I right in thinking that this is the quirk that allows Willy's sprite to pass leftwards through an Earth block at leg-height?

EDIT: I don't so much mean leg-height, but the Earth block is lower than head-height by the time he starts to pass through it (his hat at least is projecting above the top of the Earth block).
Immediately beforehand, he is cell-aligned both horizontally and vertically - he is in (left-moving) animation-frame zero, adjacent to a single-height Earth block, with the upper half of his sprite occupying the same cell-row as the block, and he is still in the 'ascending' part of his jump.

There is no check for an Earth cell adjacent to his head on the left, and so nothing to prevent his onwards horizontal motion.

But then in the next time-frame, as well as having moved 'into' the Earth block [although again, there is no pixel-insertion into the block at this stage, as he's in left-moving animation-frame 3 in which only the right-hand of the cell-columns he occupies has filled-in pixels], he has also moved up by one increment in the jump.

As a result, the top-left cell occupied by Willy's sprite [which by now occupies three rows of two cells] does NOT contain an Earth cell*, so the 'ILB' code at 36540 that normally dumps him downwards in these circumstances does NOT kick in, and his jump carries on upwards - with his legs entering the Earth block.

(* Assuming it's a single Earth block that we're considering, or at least only a single-row Earth platform - I think Willy can jump through the middle Red platform in Under the MegaTree, for example.)

Edited by IRF, 23 April 2016 - 09:57 PM.


#17 IRF

IRF

    Advanced Member

  • Contributor
  • 3,692 posts

Posted 23 April 2016 - 08:26 AM

(* Assuming it's a single Earth block that we're considering, or at least only a single Earth-block Earth platform - I think Willy can jump through the middle Earth block platform in Under the MegaTree, for example.)


See attached - a single 'leafy' Water cell has been added under the end of the middle Earth block platform in Under the MegaTree.

If Willy walks forward two animation-frames from his starting position when the game is first loaded, turns round (so he's facing left with his legs together) and jumps leftwards, then the quirk under discussion allows him to access the 'Forbidden Holy Ground' in At the Foot of the MegaTree!

EDIT: The other attached file illustrates the point I made a couple of three posts back about Emergency Generator. Jump rightwards from the starting point and Willy can exit to Priest's Hole. (However, if he jumps to the top of the stack first, then he can't make the jump.)

P.S. Obviously, these files are based on the 'unfixed' game engine!

Attached Files


Edited by IRF, 23 April 2016 - 09:44 PM.


#18 IRF

IRF

    Advanced Member

  • Contributor
  • 3,692 posts

Posted 23 April 2016 - 09:03 AM

When Willy jumps onto a ledge underneath an Earth cell, his 'physical presence' (2x2 cell) is only inside the Earth cell for a single time-frame, before being ejected one cell-row downwards (by the same bit of code that causes the ILB effect). Furthermore, at that instant he is in animation-frame 0 (when moving right; or 3 when moving left), so his filled-in sprite only occupies the 'back column' of his 2x2 cell, and there is no pixel overlap with the Earth cell.


To illustrate the point in bold, please see the attached file (my Bug Fix is in place in this one!)

I've inserted a Black static guardian into the Earth cell above the 'ledge', so that the guardian is colouring in the Earth block (and the ones adjacent and above), but the two horizontal rows of Black pixels in the guardian's sprite are placed such that there is no 'pixel coincidence' with the Earth block (and so no Infinite Death Scenario upon start-up!)

Willy can jump rightwards and land on the ledge safely, illustrating that his sprite doesn't truly enter the Earth blocks at any point in the jump.

However, if you wander down the ramp to the left and jump through the Innocent-Looking Block (which contains the same Guardian with the same 'parallel lines' sprite, just lowered down accordingly to be embedded within the ILB), then Willy is killed - as his sprite enters the Earth cell causing his pixels to collide with the guardian's pixels!

(N.B. If Willy walks up to stand adjacent to the right of the ILB, his sprite turns Black (because he is within the lower guardian's 2x2 'square of influence), but he is of course blocked from walking leftwards into the block due to the patch, so he can't be killed in that way.... Unless, that is, the previous game was abandoned at a certain point mid-jump; I've not fixed that aspect yet!)

Attached Files


Edited by IRF, 23 April 2016 - 09:40 PM.


#19 IRF

IRF

    Advanced Member

  • Contributor
  • 3,692 posts

Posted 23 April 2016 - 09:43 AM

As a result, the top-left cell occupied by Willy's sprite [which by now occupies three rows of two cells] does NOT contain an Earth cell*, so the 'ILB' code at 36540 that normally dumps him downwards in these circumstances does NOT kick in, and his jump carries on upwards - with his legs entering the Earth block.


Going further into 'quirky territory' (which is admittedly rather off-topic for a thread that started off trying to eliminate a quirk!), it would be possible to devise a bit of code, analogous to that at 36540, but which had the opposite effect!

i.e. if Willy becomes cell-row aligned (only occupying two rows) with his legs occupying an Earth cell (i.e. he has just jumped up and through an overhead Earth block, and is nearly at the top of his jump), then the code could rapidly adjust his y-coordinate upwards by one cell-row, depositing him on top of the Earth block!

This would effectively allow him to jump to a normally unreachable height! (Three rows above his starting point.). A new kind of Superjump!!

Edited by IRF, 23 April 2016 - 09:31 PM.


#20 andrewbroad

andrewbroad

    Advanced Member

  • Contributor
  • 50 posts

Posted 23 April 2016 - 10:38 PM

By “jumping left through overhead Earth cells”, I mean any of the following patterns:

(1a) ...    (1b) |..    (1c) ....
     |..         |..         ||..
     .WW         -WW         ?-WW
     .WW         -WW         ?-WW
     ?==         ?==         ??==

(2a) ....   (2b) |...
     |...        |...
     ....        -...
     ..WW        -.WW
     ..WW        ?.WW
     ??==        ??==

(3a) .....  (3b) .....
     .$...       .....
     ||...       |.|.. (Daniel Gromann’s overhead ILB)
     ...WW       ...WW
     ...WW       ...WW
     ...==       ....=
     .....       .....
     .....       .....
     .....       .....
     ?==??       ?==??

Key

.  Air
-  Water
|  Earth  
=  any stand-onable cell-type
?  any cell-type
$  Item
WW Willy
WW

Edited by andrewbroad, 23 April 2016 - 10:39 PM.

  • IRF likes this

Dr Andrew Broad





0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users