-
Posts
5,112 -
Joined
-
Last visited
Everything posted by IRF
-
Last few for now: - In JSW2, in a room with a narrow passage along a conveyor with Earth blocks located two rows above Willy's head, you can't perform the trick of pressing the Jump and [opposite sideways movement key to the direction of the conveyor] simultaneously, and then keeping the 'opposite L/R' key depressed, to bring Willy to a halt on the conveyor (as you can do in 'Tree Root', or in the Final Barrier in MM) - Willy's progress along the conveyor can be slowed down, but not stopped; - Conversely, in JSW2 Willy can progress 'upstream' along a conveyor in a similar scenario (with Earth blocks two rows above the conveyor) by jumping up onto the conveyor - in JSW1, Willy would bump his head on the overhead Earth block, and this would reset his Movement Flag, preventing him from proceeding up the conveyor. [Looking at Andrew Broad's list of quirky features for JSW2, hitting an overhead Earth block during a jump also alters Willy's Airborne Status Indicator in a different way as well, meaning that he can't fall as far afterwards as he can in JSW1 - although I haven't explored this behaviour yet.)
-
There's something strange and asymmetrical about JSW2 conveyor behaviour. Try starting up the game (with Willy at the left of the bath, facing right) and keep the jump key depressed, without pressing any sideways movement keys. Willy jumps straight up, then turns around and proceeds leftwards by one increment at a time, in between a series of vertical jumps - rather than being sent into a leftwards jump by the action of the bath (which is a left-conveyor), as occurs in JSW1. But if you start off with Willy in the middle of the bath, and try to perform vertical jumps, then he is sent jumping leftwards as you would expect. And if you perform a similar (mirror imaged) set of jumps at the right-hand end of the 'ballroom table' (i.e. the right-conveyor in 'Ballroom West'), then Willy is sent into a rightwards jump (which is more in line with JSW1 conveyor behaviour). **** A more well-documented difference between JSW1 and JSW2 is that, in the latter game engine, Willy can safely jump over a head-height Fire cell (provided he starts the jump from precisely the right position). Completing the room 'The Garden' wouldn't be possible without this, although it does provide Willy with a 'short-cut' out from the upper Ballroom platforms without having to climb up the East Wall (by jumping over the spider at the top-right of 'To the Kitchens...Main Stairway'). I would speculate that this manoeuvre is possible because the routine which draws Willy's attributes (and checks if he has collided with, or stood upon, Fire cells) doesn't make a check for underfoot Fire if Willy is jumping (or at least, if he is on the ascent part of a jump)?
-
I've just spotted a couple of changes to the layouts of classic rooms in JSW2: - In 'The Bow', the Water platform with the 'ship's wheel' item at the end of it, has been extended by one cell - this was presumably done to overcome the difference in the jumping behaviour when Willy is up against the adjacent Earth pillar (which extends two cells higher than the Water platform); just as in 'Banyan Tree' or The Bathroom in my earlier test file, Willy cannot jump up and land on top of the Earth pillar unless he steps far enough back from it (hence the need to extend the 'ships wheel' supporting platform); - In 'Under the Drive', one of the platforms to the left of (and two cell-rows higher than) the end of the conveyor has been moved leftwards by one cell-column - without that change, the difference in the sequence of the 'Move Willy' routine presumably meant that Willy would have missed that platform at the end of the sequence of three consecutive jumps after entering from 'Tree Root'. **** This doesn't involve a layout change between JSW1 and JSW2, but there is a change in Willy's behaviour - when Willy walks down the flagpole in 'On top of the house', in JSW1 he passes through the wall/Earth block at the base, and then emerges out the other side of that block and carries on his way (until the next wall blocks him from walking any further). But when performing the same manoeuvre in JSW2, he once again walks into the first wall block, but he is then prevented from proceeding any further unless he jumps out of that wall block.
-
Sorry, in my previous response I thought you were considering a 'turn around and jump' scenario in 'Priest's Hole'. In the situation your screenshot depicts, the 'safe' way to do it is to ensure that Willy is positioned two steps away from falling off the platform (i.e. two steps if he were to walk forwards), and then perform the jump/hold jump/press left sequence of keypresses. **** There seems to be another quirk at play. If you stand somewhere on a solid floor (with no overhead obstacles), press Left+Jump simultaneously, and see how many horizontal increments Willy has moved on by when he lands at the end of the jump, it is one more increment than if you do a vertical jump first and then hold down Left+Jump whilst he is still airborne. I wonder if, in the single time-frame when Willy lands, he is responsive to horizontal keypresses but not to the jump keys? That could explain the difference in behaviour for both of the above scenarios. I don't suppose there's a disassembly of the JSW2 game engine available anywhere, is there?
-
I believe that there may be differences in some of the entries in the left-right movement table (the equivalent of the table at #8421 in JSW1) in the JSW2 game engine, which have the result that if Willy is facing rightwards and you press left (or vice versa), then he doesn't just turn around but his animation-frame is also incremented at the same time. This allows him to jump leftwards and then rightwards in quick succession (whereas in JSW1 if you try to do that, he will turn around upon landing but do a vertical jump before performing the jump back the way he came from). One way to get around this effect in the 'Priest's Hole' scenario is to have Willy standing on the edge of the platform facing away from the direction he is about to jump, and then press the 'opposite left-right' key and Jump key simultaneously. Then he will turn around and jump without falling off his precarious perch! **** However, this 'turn around and move at the same time' effect doesn't explain what is going on in my 'JSW2 New Quirky Feature' test file. If you move Willy into the bottom-right corner, facing right, then press Left+Jump simultaneously (so that he turns around but starts the jump from as far right a position as possible), then he still jumps all the way over the pillar and falls down into the hole on the other side. Conversely, in the test file based on the JSW1 game engine, you can walk Willy all the way up to the two-high Earth block pillar (facing it and touching it), and then jump up onto it without him falling down into the hole on the far side - he lands on top of the pillar, one animation-frame short of falling past it. **** During my earlier experimentation, playing around with the jumping routine in JSW1, I managed to recreate the behaviour seen in JSW2, in my 'Jump Code rewrite' test file (http://jswmm.co.uk/topic/185-free-space-and-code-optimisation-in-jsw/page-20?do=findComment&comment=8311). In fact, I came up with that test file, and discovered the 'different' jumping outcomes, before I spotted the similar behaviour manifesting itself in JSW2. I believe that the difference in the JSW2 jumping behaviour may arise because in each time-frame of a jump, the check for a solid underfoot platform (to curtail the descent phase of a jump) takes place before Willy's y-coordinate is incremented downwards.* Whereas in the JSW1 game engine, he is moved downwards during a jump before the check for underfoot behaviour takes place. That, I believe, is the fundamental reason why Willy can jump into supposedly solid blocks. So really, it is the JSW1 jumping that is the illogical and quirky behaviour - Willy shouldn't be able to jump up onto a two-block high wall (such as you get in 'Banyan Tree') unless he takes several steps back from it before taking the jump. I'll try to create a few frame-by-frame screenshots later to illustrate exactly why that is the case. (*EDIT: Either that, or both vertical AND horizontal incrementations of Willy are performed in JSW2 before a check for underfoot platforms is made - actually, that might explain why Willy is able to jump into the slots in 'Wine Cellar' without his head entering an Earth block on the way down.)
-
Furthermore, I've just discovered an even stranger quirk in the previously-uploaded 'JSW2 New Quirky Feature' test file. Start up the game, then immediately press Right+Jump simultaneously and keep them depressed - Willy lands on the original Bathroom tap, and eventually the new tap item if you keep those keys depressed, without collecting them!!
-
I am not aware of any previous discussion of this quirky feature of Jet Set Willy 2 - it isn't mentioned in Andrew Broad's fairly comprehensive list of quirky features. If you open up the attached 'JSW2 New Quirky Feature' test file, and try to collect the new Bathroom tap, you'll find that Willy gets stuck, with no hope of escape! But in the other attached file, 'JSW2 New Quirky Feature not in original JSW', which has the exact same layout changes implemented to The Bathroom, Willy can collect the new item behind the newly-inserted walls, and get back out again. Curious! The subtly different behaviour could form the basis of a frustrating trap in a modified game based on the JSW2 game engine! (Not with an item at the bottom of the hole, though, as that would render the game uncompletable without loss of a life.) N.B. It might be prudent to have an occasional arrow come along at head-height, to put Willy out of his misery if he gets stuck! JSW2 New Quirky Feature.z80 JSW2 New Quirky Feature not in original JSW.z80
-
A couple of other comments on the above: - It doesn't really help out if Willy gets stuck somewhere upon room entry (e.g. if he jumps off the top of one room and ends up embedded in a solid wall in the room above) - but scenarios such as those should really be eliminated by careful design of the game layout; - The choice of entry point into the 'routine'* at #90B6 - the JUMP from #8AB8 has a destination of #90B8 - is deliberately different to the usual entry points of #90B7 or #90B8. In this case, we are jumping straight from the Main Loop, not from a routine or subroutine, so there is no need to use any POP commands to clear the stack. (* 'Routine' is in quotation marks here because it isn't technically a routine, since flow of execution never arrives there via a CALL.)
-
Correct (as in, your answer inside the spoiler box)!
-
See if you can guess what these two POKES will do: POKE #8AB9,#B8 POKE #8ABA,#90
-
Remake of Manic Miner- Both bug byte and S.P. versions
IRF replied to Norman Sword's topic in Remakes
I was aware of the differences in the guardian sprites in 'The Warehouse' and 'Amoebatron's Revenge', but the alternate pixel patterns for the magenta Fire cells and the collectable items in the Software Project's version of 'Processing Plant' is news to me! :) -
https://www.youtube.com/watch?v=Kg-L14U0ppU&feature=share
- 19 replies
-
Remake of Manic Miner- Both bug byte and S.P. versions
IRF replied to Norman Sword's topic in Remakes
The missing pixel from Willy's car door has also been restored. :) -
I would add that when Willy is moving upwards, he has only usually moved up by one increment when the code kicks in, so the push back downwards is also only by one increment and therefore doesn't seem as stark. Whereas when he is on the way down, the code takes effect as soon as his head is aligned with the block, so the instantaneous downwards adjustment is an entire cell-row - much more noticeable. I think it could be solved by only preventing the wall-head check when Willy is jumping AND the Jump Counter (#85D5) has reached a value of 11 (#17 in hex) i.e. one increment before the end of the jump, which occurs when #85D5 = 18 (#12).
-
Some interesting analysis, thanks Norman! (I think the code you're referring to, which ejects Willy downwards from a wall tile during a jump, is at #8EBC.) Indeed! I only discovered today that the alternative fix which I came up with to allow Willy to jump into cut-out gaps in walls (namely to increment his horizontal movement one more time at the end of a jump, by replacing the RET at #8EB5 with a JUMP to #8FBC), has an unforeseen and critical impact on the game - because each jump takes Willy one horizontal increment further, the sequence of jumps along the conveyor in 'Under the Drive' no longer allow Willy to complete that room (and hence he can't complete the game, unless the layout of that room is changed!)
-
I need to check 'Under the Drive' with this patch in place - it may be impossible, not because of the code which stops Willy from jumping into a wall, but because of the additional horizontal increment when jumping (designed to allow the Wine Cellar to be completable). EDIT: Alas, it is impossible to complete 'Under the Drive' (and therefore the game as a whole) with this patch in place! Taking that into account, along with the fact that Willy also can't escape after collecting the item in 'Forgotten Abbey' without losing a life, and there's probably no point in creating a patch tape file to import into the game as Andy suggested. It was only really an experimental file anyway, so no matter. :)
-
Note that this patch only tests for Willy's legs entering a wall tile/Earth cell, not floor tiles/Water, so it doesn't have the same effect on the general jumping dynamics as my other patch which inverts the jumping logic (i.e. the one that tests for underfoot platforms before adjusting Willy's y-coordinate).
-
Some jumps might now be possible that previously were not. E.g. jumping over the cyan 'spider web' guardian in the Orangery from right to left at the upper level? On the other hand, some of the jumps in 'Out on a Limb' might now be impossible with the original layout and this patch in place! Look into this I must... Also, check that jumping through the base of a ramp, as in 'The Chapel' or 'Crow's Nest', is still possible. And the tricky sequence of well-timed jumps along the conveyor in 'Under the Drive'. Finally, it might not be possible for Willy to collect one of the items in 'Watch Tower' in particular without jumping right over the parapet and dropping into an infinite-death scenario in 'Quirkafleeg'!! (Definitely need to check that one!)
-
Another example of a change to the jump dynamics is in the Orangery, where in order to collect the bottom-left item, you have to steep further back before making the jump over Moon-Face, otherwise the water platform/floor tile above the item catches Willy, where beforehand he fell through it. The first jump in East Wall Base may also be trickier - I think Willy will have to use every floor tile in the room to climb it, rather than being able to skip the second one up.
-
Thanks for the Christmas present, Norman Sword!
-
I think I've covered all the constituent parts now; I just need to cobble it all together into a test file and see if it works! However, that will have to wait till after Christmas (and probably into the New Year).
-
Slight rewrite to detect overhead blocking wall cell: ADD HL,BC ld a,(WALL) ;in theory this position could be off the top of the screen bit 1,h jr nz,ignore_head_check ;the next wall test only occurs if Willy is walking up a ramp (i.e. if B is -01) INC B JR NZ, ignore_other_head_check ; the Zero Flag will be set only if Willy is walking up a ramp LD B,A ; save wall attribute in B ;Adjust HL to find overhead wall LD A,L SUB A,(IX+ramp_animation) ;this variable can be reused LD L,A LD A,B CP(HL) RET Z ;Adjust HL back again LD A,L ADD A,(IX+ramp_animation) ;and reused again LD L,A LD A,B ignore_other_head_check: cp (hl) ;head ;this is the original head-height wall check ret z ;return if path is blocked ignore_head_check: ****** UPDATE: Here is an alternative, slightly more efficient rewrite of this part of the routine: ADD HL,BC ld a,(WALL) ;in theory this position could be off the top of the screen bit 1,h jr nz,ignore_head_check ;the next wall test only occurs if Willy is walking up a ramp (i.e. if B is -01) INC B JR NZ, ignore_other_head_check ; the Zero Flag will be set only if Willy is walking UP a ramp LD B,L ;retain old coordinates in HL ;Adjust HL to find overhead wall LD A,L SUB A,(IX+ramp_animation) ;this variable can be reused LD L,A LD A,(WALL) CP(HL) RET Z ;Adjust HL back again LD L,B ignore_other_head_check: cp (hl) ;head ;this is the original head-height wall check ret z ;return if path is blocked ignore_head_check: