Jump to content


IRF

Member Since 23 Aug 2015
Offline Last Active May 29 2020 08:41 PM
-----

Topics I've Started

Title-screen tunes for Andrew Broad's JSW->MM and MM->JSW conversions

11 April 2020 - 03:22 PM

EDIT: The files upon which the attached test files were based are Copyright of Broadsoft (2004).

 

Many years ago, Dr Andrew Broad created a conversion of Jet Set Willy to the Manic Miner game engine, and conversely, a conversion of Manic Miner to the Jet Set Willy game engine.  They were released as 'Easter eggs' in the 'Party Willy' box set.

 

This topic concerns itself purely with the title-screen tunes in both conversions, which are 'remixes of the original tunes for the new game engine'.  I have analysed the title tunes, and created updated versions of each conversion with the aim of finessing these 'remixes' - hopefully capturing the spirit of what Andrew was originally trying to achieve.  And since Easter is upon us, and everyone presumably has lots of spare time on their hands at the moment, I thought I'd share them with you.  :)

 

********

 

The MM->JSW conversion features a rendition of MM's title tune 'The Blue Danube', complete with the 'octave-shifting' modulation that you normally hear in the JSW theme tune.  Thus Andrew managed to capture rather well the atmosphere of the JSW title screen in the MM->JSW conversion.  :)  However, I would say there are a couple of flaws in that rendition:

 

(1) There were a few notes [directly taken from Matthew Smith's original score of the tune] which dropped below Middle C, causing erratic, very high-pitched notes to play.  This happens because if you have a value higher than #80 and try to double the pitch (via the RL E command in the 'Play the theme tune' routine), then the highest bit drops off the end of the byte.  This is a flaw in Matthew's title tune routine; it should really detect the Carry Flag being set in such circumstances and adjust the note-playing loop accordingly.  So that's what I've done in the attached update of the MM->JSW conversion, by inserting a four-byte intervention into that routine.  Now if the RL E command sets the Carry Flag, the value in E is simply overwritten with #00.  (This is a fixed pitch value - corresponding with Bottom C - but it isn't too far off being an octave below the problematic notes in question, because they all happen to hold a pitch value of #88 - Middle B.  However, the effectiveness of this crude patch would probably break down if you tried to play notes much lower down the scale.)

 

(2) Andrew's JSW-style rendition of 'The Blue Danube' also seemed to finish rather hurriedly.  In original MM, some of the notes towards the end of the tune are played for twice the duration of the rest of the tune's notes.  However, it isn't possible to assign notes of differing lengths for the title tune in the JSW game engine.  But since there were a few spare bytes available at the end of the score*, in the attached update to MM->JSW I have taken the opportunity to insert a couple of additional notes (so that there are two consecutive notes of identical pitch, where in MM there would be a single note of that pitch set to play for twice the duration), in order to keep the tune going at a constant pace until the end.

 

[* Arising from the fact that JSW's Moonlight Sonata is 99 bytes long, whereas MM's Blue Danube is 95x3 bytes and so Andrew had inserted 95 pitch values into the regular 'JSW title tune' area of memory.]

 

********

 

Andrew's JSW->MM conversion plays a pure tone version of JSW's title tune 'Moonlight Sonata'.  It achieves this by making each pair of notes consist of one value (x) followed by a note with exactly double the pitch value (2x).  This seems to turn off** the 'dischordancy' feature of the tune that you normally hear. i.e. when 'The Blue Danube' is playing in the original MM.

 

[** Incidentally, looking at the Manic Miner title tune-playing routine, I can see why that would have the effect of generating pure tones, although I can't recall this ever being discussed - either here or on the Yahoo! Group - as an available technique to employ when creating MM title-screen tunes?]

 

However, I think an opportunity was missed there to have 'Moonlight Sonata' playing in a dischordant manner, in order to give a more 'Manic Miner'-like flavour to the title-screen tune of the JSW->MM conversion.

 

Furthermore, Andrew's rendition of 'Moonlight Sonata' in the MM engine cuts off a few notes early, because the original MM title tune consists of 95 pairs of notes (i.e. 95 sets of three bytes, one determining length and two for pitch), whereas the JSW tune is 99 bytes long (each byte corresponding to a note which is played at a higher pitch for half of its duration, before the pitch is doubled for the second half of the note).  So converting the JSW tune's score into a 99x3 byte tune wouldn't fit into the space in memory where the MM theme tune is stored.

 

Finally, all the notes in Andrew's 'Moonlight Sonata Manic Miner Remix' are of exactly the same duration.  This is consistent with the original title tune in JSW, where the length of each note is the same, but it does mean that another available feature of the MM game engine's tune-playing routine (the ability to play notes of different length) isn't taken advantage of.

 

...So, after reflecting on all of the above...

 

Please find attached an updated version of JSW->MM [which, as per Andrew's original version, is in three parts, because there are 60 playable rooms in JSW and the MM game engine can only handle 20 caverns].

 

Hopefully you will agree that this is a much more 'Manic Miner-esque' rendition of 'Moonlight Sonata', befitting of this JSW->MM conversion!  ;)

 

I also took the opportunity of extending the title tune to its full, original length (99 notes, or rather 99 sets of three bytes now).  That ate into the space in memory where the in-game tune is stored, and so in order to compensate for that, I replaced what was left of 'If I were a Rich Man' with Andrew Broad's 'remix' of 'Hall of the Mountain King'*** from the SE of his game 'Manic Miner 4'.  That rendition repeats 32 identical sets of notes twice, so I tweaked a command in the tune-playing part of the Main Loop so that the in-game tune is just 32 bytes long.

 

[*** I confess that it's not ideal not to have '...Rich Man' playing in a variant of JSW, but there is a history of '...Mountain King' being used instead in some releases of JSW (back in the day when it was thought that an 8-bit rendition of a tune from a West End Musical might constitute some outrageous breach of copyright!)  And it was a quick and easy fix; I didn't want to carry out major code-shuffling to fit both the extended title tune and a 64-byte in-game tune into the available space, but nor did I want to leave a random half-tune playing once the game starts up.]

 

One last point of interest is that the final, sustained note of 'Moonlight Sonata' in the attached file has a duration of #00 [i.e. the value of the first of the three bytes which define the parameters of the last note].  This is the longest possible duration of a note in the game engine - it is interpreted as a value of #100 (256 in decimal) to define the length of the note-playing loop, rather than a value of zero, because the register to which it is copied is decremented (to #FF / 255 in decimal) before a check is made of whether a zero value has been reached yet.


New tune

19 May 2019 - 12:13 AM

Just a bit of fun... See if you can recognise the in-game tune in the attached file...

 

EDIT: I've made a slight tweak to the second half of the tune in the additional attachment 'rev1', for a bit of variety.


[File] Maria vs. Some Bastards 2019 Bug-Fixed Edition

15 April 2019 - 08:29 AM

Posted Image

 

File Name: Maria vs. Some Bastards 2019 Bug-Fixed Edition

File Submitter: IRF

File Submitted: 13 Apr 2019

File Category: JSWMM Releases

System: Sinclair
Original Author(s): Vidar Eriksen (Erix1) [Manic Miner Technologies]
Third Party Author(s): Ian Rushforth, Andy Ford, Daniel Gromann [The Jet Set Willy & Manic Miner Community Team]

 

Maria vs. Some Bastards is a beautiful game by Vidar Eriksen (Erix1). It uses a modified JSW48 game engine that has come to be known as 'Erix1 Mode'. Its first short demo version was released in October 2001. The game was gamma-released on 6th March 2003, with four bug-fixed revisions (called Rev B, C, D and E) released within the next few weeks.

 

A menu screen implemented by the BASIC loader allows the player to choose one of the three modes: Easy, Normal or Hard. According to the message which shows in the opening room, you need to collect 120 items to complete the game if you choose the Easy mode, 240 items if you choose the Normal mode and 246 items if you choose the Hard mode.

 

Daniel Gromann raised the question of the game’s completability on the Manic Miner & Jet Set Willy Yahoo! Group in June 2007, when he pointed out that Maria did not disappear after he had collected 251 items in the Hard mode.

 

In March 2012, Vidar Eriksen promised to look into the problem and check whether some ‘end-game corrections’ he had done in Rev D were not left out in Rev E. He mentioned that a Rev F might be necessary, but it did not materialise in the following years.

 

Ian Rushforth investigated the item-collecting code in Maria vs. Some Bastards and discovered the cause of the bug which made the game non-completable. He announced his findings on Manic Miner & Jet Set Willy Yahoo! Group in February 2019, offered a bug-fix for the problem and also showed the way to collect one of the items Daniel had not been able to reach.

 

After some further discussions, the Jet Set Willy & Manic Miner Community Team produced a 2019 Bug-Fixed Edition of the game, with the following changes in relation to Rev E:

 

- Ian’s solution to the bug in the item-collecting code was applied.

 

- A way was provided to collect the rightmost item in the room "Stinking sewer" (27), which seems impossible to collect in Rev E.

 

- Three items located in the very same (non-)rooms which are used by the Softricks game engine (on which Erix1 Mode is based) to store the item table - which are thus invisible and unreachable in Rev E - were moved to other locations so that they became present in the game and collectable.

 

- As the total number of items possible to collect has now reached 256, the number required to complete the Hard mode was set to 256, with the corresponding changes in the BASIC loader and the message in “Master Bedroom”, where the game starts.

 

- An item placed in the same location as another item (as happens in “The Beach” in the original JSW) in the room “Afterliving” (46) was moved within the same room to make its collection more demanding and make the player use a route they might not use otherwise.

 

- A minor change to the layout of “Alien inferno 2" (49) was applied to force the player to press the special button in that room if they want to complete it without losing a life.

 

- The middle item in the room “Bubbles and Bob” (41) was moved to make its collection more meaningful.

 

- The up exit from "That slimy room" (11) was changed to itself instead of "The dungeon" (00), in order to prevent the protagonist from potentially getting perpetually stuck at the bottom-right corner of the latter room.

 

- The spellings of the room names “Flooding sewer” (15), “Seagull corner” (36) and “Deadly descent” (54) were corrected.

 

- A typo in the scrolly for Manic Mining Robot's Day Out, the ‘secret bonus crap game' attached to Maria vs. Some Bastards was corrected.

 

- Information about this being the 2019 Bug-Fixed Edition was added on the loading screen and in the REM statements in the BASIC loader.

 

- The Readme was also updated with the info that this is the 2019 Bug-Fixed Edition.

 

All of the above changes were applied to the actual game file by Ian Rushforth, after some deliberations with Andy Ford and Daniel Gromann.

 

We hope you will enjoy this Bug-Fixed Edition and the ability to complete Maria vs Some Bastards at long last. Have a go at it - it’s worth it! :)

 

Click here to download this file


[File] Jet Set Willy - The Mr Noseybonk Edition

06 January 2019 - 10:34 AM

Posted Image

 

File Name: Jet Set Willy - The Mr Noseybonk Edition

File Submitter: IRF

File Submitted: 06 Jan 2019

File Category: Jet Set Willy [Remakes]

System: Sinclair
Original Author(s): Matthew Smith
Third Party Author(s): Ian Rushforth

 

For this special version of Matthew Smith's classic ZX Spectrum game 'Jet Set Willy', the Retro Factor has been doubled by the introduction of Mr Noseybonk - a recurring* character from the early 1980's BBC children's TV show 'Jigsaw' - as the main protagonist.

 

(* By 'recurring' I mean that he made regular appearances in the programme - but also that he formed the basis of recurring nightmares for a whole generation of British children!)

 

The title screen music for the project is an adaptation of the theme tune from 'Jigsaw', whilst Noseybonk's theme ('A Hippo Called Hubert' by Joe Griffiths) is collectively represented by the in-game music and the coda that plays during the 'Game Over' sequence.

 

My thanks go to Richard Hallas for inspiring the concept for this project during an email exchange last year, and for his 'A Miner Triad' document (http://hallas.net/Software/music.htm) with its very useful tone chart and general advice on scoring music for the 'Jet Set Willy' game engine. I would also like to thank Andy Ford (administrator of the host site jswmm.co.uk) for his assistance with compiling the BASIC loader, and Richard Dymond for his invaluable 'Jet Set Willy' disassembly (hexadecimal format available at http://skoolkid.gith...ly/index.html).

 

Enjoy - and don't have nightmares!!!
Ian Rushforth

 

UPDATE: One week after first releasing this game as 'Jet Set Willy - The Mr Noseybonk Version', a bug came to light which caused corruption of the scrolling message on the Title Screen, and which also caused ropes to behave in strange ways during play. I have corrected this error (caused by a single errant byte), and reissued the game as 'Jet Set Willy - The Mr Noseybonk Edition' (to distinguish it from the first, erroneous release). I also took the opportunity to address a couple of bugs that were present in the original game, namely that the item in the Swimming Pool was automatically collected upon entry (so you never got the opportunity to see it), and one of the items in the Conservatory Roof couldn't be collected without sacrificing a life. It is now possible to complete the game without loss of life.

 

FURTHER UPDATE: Sinclair ZX Vega support files added to the download folder.

 

Click here to download this file


Free space and code optimisation in Manic Miner

21 November 2018 - 01:17 PM

I thought I might create a similar 'optimisation' thread to the JSW one.

 

I implemented a lot of code optimisations of the MM game engine in the recent release 'Manic Mixup'.  However, this one slipped through the next (I've only just thought of it):

 

It involves a rewrite of the routine at #92DC which plays the theme tune (Blue Danube).  I think this saves around 12 bytes.  EDIT: It actually saves eight bytes.  (I forgot to count the CALL to test the Enter key, and the RET back to the Title Screen routine if Enter is pressed.)

 

start:

       LD A, (IY+$00)

       INC A

       RET Z

       LD BC, #5028

       CALL update_piano_keys

       LD B, #00

       LD C, (IY+$00)

       LD H, D

       LD L, E

tune_loop:

       OUT (#FE), A

       DEC D

       JR NZ, not_time_for_note_1

       LD D, H

       XOR #18

not_time_for_note_1:

       DEC E

       JR NZ, not_time_for_note_2

       LD E, L

       XOR #18

not_time_for_note_2:

       DJNZ tune_loop

       DEC C

       JR NZ, tune_loop

       LD BC, #3838

       CALL update_piano_keys

       CALL #9337                            Check whether ENTER or the fire button is being pressed

       RET NZ

       LD DE,#0003

       ADD IY, DE

       JR start

 

update_piano_keys:

       LD A, (IY+$01)

       LD D, A

       CALL #932B

       LD (HL), B

       LD A, (IY+$02)

       LD E, A

       CALL #932B

       LD (HL), C

       RET