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: 4040

Author: andrewbroad

Date: 03/04/2004

Subject: Re: MM-to-JSW conversion

 

dasse68 wrote:

>
> SORRY I am so lousy to understand english in many cases so I hope
> you have indulgence for that..
>
>> Jet Set Willy (in order to generate the new JSW:MM for the Party
>> Willy box-set),
>
> Are you going to sell it or what? :)

No! I would never sell my MM/JSW games for money. The free-software
culture helps to keep the MM/JSW community alive today.

Box-set just means there are several TAP files in the release, since
I don't really want to release MM:JSW, the old JSW:MM, the new
JSW:MM, MirrorMM and MirrorJSW as separate entities.

Talking of the new JSW:MM (generated by SPECSAISIE MMtoJSW), I've
now done basic horizontal and vertical guardians, and items.

Which leaves only special effects such as Eugene, Kong-Beasts and
Skylabs to do - all of which I intend to simulate using vertical
guardians (each Skylab will be represented by just one VG, going up
as well as down, with an animation-mask of 000 rather than 011 - the
only thing that MMtoJSW will alter for VGs which happen to be
Skylabs).

Some differences between MM and JSW:

* Horizontal guardians which go left initially start on their
leftmost left-facing sprite rather than their rightmost left-facing
sprite, which means that a JSW horizontal guardian appears to start
one column to the left of its specified start-column.

* The path of a vertical guardian with the same data for start-row,
top row and bottom row, is slightly different in MM and JSW - and
even causes them to crash into the floor in the JSW conversion
of "Amoebatrons' Revenge" [17] and "Solar Power Generator" [18]!
Look into this I must...

* Items colour-cycle forwards in JSW [magenta, green, cyan, yellow]
but backwards in MM [yellow, cyan, green, magenta].


>> JSW horizontal guardians (each guardian in MM uses up one
>> guardian-class, which refers to the one sprite-page associated
>> with the room it's in).
>
> sometimes I wish I was born in england so I could understand ALL
> english sentences.. ;)

Each room in JSW can have up to eight guardians (horizontal,
vertical, arrows or ropes). I call these "guardian-instances"
because each one is an instance of a "guardian-class".

A regular JSW game can have up to 127 guardian-classes, which are
stored in a table separate from the rooms.

Each guardian-instance specifies the start-column (if it's a
horizontal guardian), column (if it's a vertical guardian or a rope)
or row (if it's an arrow), and also specifies the start-sprite
(within the sprite-page, which is specified in the guardian-class).

Each guardian-instance specifies which guardian-class it is an
instance of, and all the other data are specified in the guardian-
class.

Guardian-class data include which type of guardian it is (HG, VG,
rope or arrow), its colour-attribute, its row (if it's a HG), start-
row (if it's a VG), start-column (if it's an arrow), path-
boundaries, sprite-page and animation-mask.

A sprite-page is a 256-byte area of memory which stores the graphics
for guardian-classes which use that sprite-page. Any 256-byte area
whose start-address is divisible by 256 can be used as a sprite-
page, although many such areas are unsafe to edit because they are
used for other things (i.e. they can be read as sprite-pages, but
must not be overwritten).


>> MMtoJSW is (unlike MirrorMM and MirrorJSW) only semi-automatic.
>
> What do you mean by "semi-automatic" ?

Semi-automatic means that the game generated by MMtoJSW has to be
post-edited by a human, in order to produce a working game. This is
because I'll need to make value-judgements about where to knock
holes in walls to set the exit to the next room, how to make up for
the fact that MMtoJSW converts crumbling floors to ordinary floors,
and other minor tweaks that I'm not prepared to work into the
conversion-algorithm.

It's not uncommon for a data-transformation program to be only semi-
automatic, as it's often desirable to leave the value-judgements to
humans rather than attempt to capture them by rules that may not
apply in all situations.

However, MirrorMM and MirrorJSW are fully automatic, as laterally
inverting the rooms does not involve value-judgements - maybe just
the odd tweak required for situations such as the Kong-Beast rooms
in MirrorMM (the positions of the switches are hard-wired into the
game-engine, and I don't know where in the code), the lower
horizontal guardian in "Conservatory Roof" causing infinite death in
MirrorJSW, and what to do about Maria, the bed and the toilet, which
are hard-wired into the JSW game-engine.


>> By hand will I be knocking holes in walls and setting the
>> connections from one room to the next, and deciding what to
>> convert crumbling floors to in each case!
>
> wow! sounds really cool! have someone made it before?

I was the first to convert MM to JSW, and JSW to MM, when I did it
by hand in 1992-1996 - except for Richard Hallas
converting "Eugene's Lair" to JSW for _Join The Jet-Set!_ (1985).
The DrUnKeN mAsTeR included reinterpretations of the 20 MM caverns
in _Willy The Rogue_ (2002).


>> There's no fun like developing automatic transformations for MM
>> and JSW. :-)
>
> and that means? :)

That I'm really enjoying writing a program to convert Manic Miner
rooms to Jet Set Willy, and I really enjoyed writing my other
automatic transformation-programs: MirrorMM and MirrorJSW. For sure
will I write a program to convert Jet Set Willy to Manic Miner
(SPECSAISIE JSWtoMM) too - but not before Party Willy, because I'm
pretty much satisfied with my manual conversion (MM:JSW).

I wonder what automatic transformations I might consider in the
future? JSW II to JSW? JSW II to MM? Upside-down MM and JSW? MM and
JSW rotated through 90 degrees?

--
Dr. Andrew Broad
http://www.geocities.com/andrewbroad/
http://www.geocities.com/andrewbroad/spectrum/
http://www.geocities.com/andrewbroad/spectrum/willy/

 

 

arrowleft
arrowright