Jump to content


Member Since 23 Aug 2015
Online Last Active Aug 20 2017 08:28 PM

Topics I've Started

Manic Miner Air Supply - a more refined approach

01 August 2017 - 05:06 PM

There is a misconception in Dr Andrew Broad's otherwise excellent 'Manic Miner Room Format' document, regarding the matter of Miner Willy's Air Supply.  Furthermore, John Elliott's JSWED editor seems to have followed Andrew's lead on the matter.  And both parties were, in all likelihood, "led up the garden path" by Matthew Smith's original choices for the values of the initial air supply in the original MM caverns.


Here is the pertinent excerpt from Andrew Broad's Manic Miner Room Format document:



Offsets 700 to 701: Air

The amount of air you have in a room is held in Offsets 700 and 701:


  • The value held in Offset 700 is a+32, where a is the column that the air goes up to (effectively, you have a-4 characters of air, as the air starts at column 4). The default value for Offset 700 is 63 (i.e. a=31), but in many of my caverns, I give you a reduced air supply! :->
  • The value held in Offset 701 is the number of pixels of air you have (in addition to characters of air, as encoded by Offset 700), represented as one of the following bytes (shown in binary to help you visualise it):
    10000000 (denary 128)
    11000000 (denary 192)
    11100000 (denary 224)
    11110000 (denary 240)
    11111000 (denary 248)
    11111100 (denary 252)

    There are bugs associated with using 00000000, 11111110 or 11111111 as the value for Offset 701, so it's derecommended (and my Manic Miner Screen Editor doesn't allow it - actually, it does allow 11111110 because I only discovered that this value was problematic after I released MMSE):

    • Using 00000000 (denary 0) causes a fairly harmless glitch in the graphics (see Room 10 of Manic Miner: The Buddha of Suburbia, "The BUDDHA OF SUBURBIA : suburbs");
    • Using 11111110 (denary 254) or 11111111 (denary 255) confuses Manic Miner when it is supposed to subtract a character of air from Offset 700, resulting in an infinite amount of air and causing the Spectrum to lock up when you exit a cavern. I used this trick in the final room of both Manic Miner 4 and Manic Miner: The Buddha of Suburbia, but it's not to be recommended, especially not in earlier levels! ;-)


The possible values for Offset 701 recommended by Andrew are not linear, or proportionate to the number of pixels of air displayed in the final character of the air bar.  The number of pixels that are initially drawn within the final character of air are as follows:


10000000 (denary 128) - 3 pixels
11000000 (denary 192) - 5 pixels
11100000 (denary 224) - 6 pixels
11110000 (denary 240) - 7 pixels
11111000 (denary 248) - 7 pixels
11111100 (denary 252) - 7 pixels


(The only difference between the last three values, is a small variation in the number of time-frames which elapse before the first pixel of air supply is erased from the air bar.)


In JSWED, John Elliott has established an Air Supply drop-down menu which allows possible values from 0 to 161, representing 6 possible values for each of the 27 available characters of air supply. i.e. seemingly in accordance with Andrew's recommended values above.  [N.B. A value of 162 may be selected in a JSW64 game, but this assigns a value of #FF to Offset 701, as an indicator that the room/cavern does not have a limited air supply.]


Now, as it happens, all of Matthew Smith's original caverns contain a value at Offset 701 which matches one of Andrew's values.  The specific values are detailed here: http://skoolkid.gith...riableAirSupply


However, any value could be selected for Offset 701 (this can be done via the hex editor in JSWED), as long as it is a multiple of 04.  Which, as Andrew points out, rules out denary 254 or denary 255.  (They cause the Spectrum to lock up when Willy exits a cavern, because the air supply countdown is decreased in decrements of 4, and so Offset 701 never reaches the target value of zero.)  Andrew is also correct about the harmless glitch caused by selecting an initial value of zero for Offset 701.  (The glitch occurs because, when the 'Decrease the air supply' routine at #8A3C is run in that circumstance, the number of characters of air supply is decremented before the routine gets a chance to wipe the pixels from the first [rightmost] character of air supply - the whole bar of air having being drawn in the first instance by the 'Cavern Setup' code which starts at #8691).


I believe that Andrew must have - without the benefit of SkoolKid's excellent MM disassembly being available at the time, of course! - mixed up the possible values of the A register, emerging from the AND #E0 gate at #8A55, with the possible values of the E register which is used to determine how many pixels of air supply to draw in the rightmost character of air (individual bits of E are set, via a DJNZ loop, after A has been divided by #20 and fed into the B register - see #8A57-65).





There is a more refined possible approach to the gradation of the air supply.  The air supply is graded at three levels, listed below in decreasing order of magnitude:


- The number of characters of air within the air bar (derived from Offset 700);

- The number of pixels of air within each character of air (determined by the value of Offset 701, in steps of #20, and so eight pixels disappear before the byte wraps round past zero and the character is fully erased);

- The number of time-frames that elapse between the removal of consecutive pixels of air supply (eight time-frames, equating to a decrease in the value of Offset 701 of 8 x #04 = #20).


Andrew's approach involves assigning values to Offset 700 in a linear manner, but his suggested values for Offset 701 are a non-linear hybrid of bullet-points 2 and 3 above.


My suggested alternative would be to use the following possible values for Offset 701:


00100000 (#20, denary 32)

01000000 (#40, denary 64)

01100000 (#60, denary 96)
10000000 (#80, denary 128)

10100000 (#A0, denary 160)
11000000 (#C0, denary 192)
11100000 (#E0, denary 224)
11111100 (#FC, denary 252), or alternatively 00000100 (#04, denary 4)

(The final value would fall slightly outside of the linear pattern, causing a pixel-increment to occur either one time-frame early or one time-frame late; but this is necessary in order to prevent the visual glitch which Andrew reported when a value of 0 is selected.)


This alternative air-supply regime would translate into possible values, in an equivalent JSWED drop-down menu, of 0 to 215,  representing 8 possible values for each of the 27 available characters of air supply.  (In which case, a value of 216 should be used for a room without a limited air supply.)

[File] Jet Set Mini

21 July 2017 - 07:09 PM

Posted Image


File Name: Jet Set Mini

File Submitter: IRF

File Submitted: 21 Jul 2017

File Category: JSWMM Releases

System: Sinclair
Third Party Author(s): Ian Rushforth & Andy Ford


'Jet Set Mini' is a redesign of Matthew Smith's classic ZX Spectrum 48K game 'Jet Set Willy'. It can be played on a real Spectrum, on the Sinclair ZX Spectrum Vega/Vega+ or on a computer, game console or another device using a ZX Spectrum emulator.


In 'Jet Set Mini', Willy's original mansion has been somewhat reduced in scale. But size isn't everything! Much of the code which was freed up by paring back the layout has been recycled, in order to insert a whole host of special effects into the game!


Many of these changes are implemented via tools known in the trade as 'Patch Vectors', which are called up on a room-specific basis. There are also a number of generic modifications and enhancements to the game engine. However, the essence of this 8-bit, 48K game will be very familiar to connoisseurs of 'Jet Set Willy'. We hope you enjoy it!


Click here to download this file

[File] Jet Set Mixup

21 July 2017 - 07:09 PM

Posted Image


File Name: Jet Set Mixup

File Submitter: IRF

File Submitted: 21 Jul 2017

File Category: JSWMM Releases

System: Sinclair
Third Party Author(s): Andy Ford, Ian Rushforth & Daniel Gromann


'Jet Set Mixup' is a redesign of Matthew Smith's classic ZX Spectrum 48K game 'Jet Set Willy'. It can be played on a real Spectrum, on the Sinclair ZX Spectrum Vega/Vega+ or on a computer, game console or another device using a ZX Spectrum emulator.


The layout of 'Jet Set Mixup' is almost identical to that of 'Jet Set Willy', but most of the original guardians have gone on holiday, and have been replaced on duty by sprites from 'Manic Miner' and 'Jet Set Willy II'. Furthermore, the player is offered a choice of sprites with which they can play the game. We hope you enjoy this 'mixup'!


Click here to download this file

Fix for the 'Nine lives in the light' bug

07 March 2017 - 01:18 PM

In 'Solar Power Generator', Miner Willy isn't always killed if he runs out of air supply at a time whilst he is standing in the solar beam:




This is because the 'Solar Power Beam' routine calls up 'Decrease the air supply' as a subroutine eight times in succession (four for each character of Willy's sprite that the beam passes through in a given time-frame), without checking whether the air in the cavern has run out.  As a result, the air supply can 'wrap around' past zero, causing the final character of air on the status bar to be replenished with another eight pixels!


Anyway, I've come up with a twelve-POKE fix for this:


At #88FC, insert '18 F4 E1'.


At #8D89, insert '06 04 C5'.

(Incidentally, the operand '04' is the number of times the Air Supply is depleted by the Solar Beam in the original MM; it could be altered to make the Solar Beam less deadly, or even more so!)


[The CALL at #8D8C remains in situ.]


Finally, at #8D8F, insert 'C1 CA FE 88 10 F6'.

For fans of Ultimate Manic Miner...

04 February 2017 - 05:50 PM

... I strongly recommend that you play the room 'Eugene Lair' directly upon starting up the game. i.e. by setting Room 61 as the starting room - Willy should be positioned, via the Portal page in JSWED, at the bottom of the room above the 'EN' of the word 'EUGENE'.  (Make sure he starts off buried up to his neck in the two Cyan cells, rather than standing on those cells, or else the room may be uncompletable.)


This is how the author intended the room to be played, I believe - over on the Yahoo! group, Igor reported a bug: "I've found a bug, that I can't solve - but it doesn't harm the game. You will meet it in the EUGENE LAIR. > Skylabs turn into Droplets. When you will get to it you'll see it."  It doesn't harm the game in the sense of rendering it uncompletable, but I do believe it takes a certain element away from that room.


What is happening is that there are Droplet guardians (i.e. Skylabs that don't move sideways between 'incarnations') that are normally encountered in an earlier room of the game.  The effect of the Droplets patch, which John Elliott describes as 'experimental'*, is to permanently overwrite the horizontal offset that is applied to Skylabs (at #FF61 in the Skylab movement code).  Incidentally, I believe I have come up with a fix for that, which I shall report on later.


[*'Experimental' probably for this very reason, as well as the fact that they can sometimes be drawn with an erroneous initial sprite-frame.]


Anyway, if you load up the game with Willy placed directly into Eugene Lair, then you will bypass the corruption caused by the Droplets in the earlier room, and so you'll be able to play 'Eugene Lair' with the Skylabs (which look like explosions of lava) in full effect.  It's an awesome challenge - nowhere is safe!!  :o  :excl:  ;)