Jump to content
Jet Set Willy & Manic Miner Community

Jet Set Willy cycle randomiser - mod idea


RuffledBricks

Recommended Posts

Ah, I get what you mean now, Norman Sword. It's more efficient with the Guardian Classes to use several instances of a single Guardian Class in The Attic, and adjust each of them vertically when building the room before Willy enters (to create the sinuous shape of the Centipede/Bug/whatever), rather than using difference Guardian Classes for each segment.

Link to comment
Share on other sites

This has been tested and works exactly as specified. It needs the room data changing to stop the giant heads being shifted and the forgotten Abbey and the attic data being shifted- An easy enough task

Half an hour to write.

Somewhere near the end of the room set up a call is made to rephase_room

The data at offset #e0 in every room is changed to #00 modify the sprites or #ff leave alone. Or the bits in the byte signal which sprites must be left alone. So writing 1110 0000b would instruct the routine to leave the first three sprites alone. ( eg. stop it phase shifting the big heads if they are the first 3 sprites in a room)

 

 


random_sp      equ    #80e0
return_2_me    equ    #91b6

entity1             equ    #8100


; rephase a room

rephase_room:

    ld    hl,random_sp     ; this address is any free byte in the room data - each room needs this setting up - most rooms can be left as zero
    ld    a,(hl)
    cp #ff
    ret z
    ld    c,a        ; this is the entity bit move mask

;initialise the guardians

    ld    a,#c9
    ld    (return_2_me),a   ; modify the next sprite entry  - return2 me is at address #91b6

    LD IX,entity1        ;  Point IX at the first byte of the first entity buffer at L8100

Phase_shift:

;test the end of sprite data then test the bit held in c; this signals a possible move
    LD    A,(Ix+0)
    inc a  ; cp #ff
    jr    z,no_more

    bit    7,c
    jr    nz,a_static

    cALL    RANDOM
    AND    127
    INC    A ; instead of INC B 
    LD    B,A
SHIFT_IT
    PUSH    BC
    CALL    L90C4        ; MOVE THE SPRITE
    POP    BC
    DJNZ    SHIFT_IT
a_static
    ld    de,8
    add    ix,de
    rlc    c
    jr    Phase_shift

; ensure it is put back
no_more

    ld    a,#11            ;ld de,#
    ld    (return_2_me),a
  ret

 

; the RANDOM routine does not produce RANDOM numbers it produces a sequence of numbers that is fixed in sequence. The number of digits in the sequence is large before it repeats. At machine speed calling random will produce a pattern based on its output.

RANDOM:

    PUSH    HL
S_M_C_address equ    $+1
    LD    HL,$-$
S_M_C_SEED     equ    $+1
    LD    A,$-$
    xor    (HL)
    XOR    L
    XOR    H
    inc    hl
    res    5,h
    LD    (S_M_C_address),HL
    LD    (S_M_C_SEED),A
    POP    HL
    RET

; *** NOTE ***  only 6 rooms have a value that is not 0 (zero) - 7,20,28,39,42,48 ---- rooms value start at 1 in this list

; values for byte #e0

;"The Off Licence" 1
 db #00
;"The Bridge" 2
 db #00
;"Under the MegaTree" 3
 db #00
;"At the Foot of the MegaTree" 4
 db #00
;"The Drive" 5
 db #00
;"The Security Guard" 6
 db #00
;"Entrance to Hades" 7
 db 11100000b    ;<<<<<<<<<<<<<<
;"Cuckoo's Nest" 8
 db #00
;"Inside the MegaTrunk" 9
 db #00
;"On a Branch Over the Drive" 10
 db #00
;"The Front Door" 11
 db #00
;"The Hall" 12
 db #00
;"Tree Top" 13
 db #00
;"Out on a limb" 14
 db #00
;"Rescue Esmerelda" 15
 db #00
;"I'm sure I've seen this before.." 16
 db #00
;"We must perform a Quirkafleeg" 17
 db #00
;"Up on the Battlements" 18
 db #00
;"On the Roof" 19
 db #00
;"The Forgotten Abbey"  20
 db #ff      ;<<<<<<<<<<<<<<<
;"Ballroom East" 21
 db #00
;"Ballroom West" 22
 db #00
"To the Kitchens Main Stairway"  23
 db #00
;"The Kitchen" 24
 db #00
;"West of Kitchen" 25
 db #00
;"Cold Store" 26
 db #00
;"East Wall Base" 27
 db #00
;"The Chapel" 28
 db 11100000b       ;<<<<<<<<<<<<<<<
;"First Landing" 29
 db #00
;"The Nightmare Room"  30
 db #00
;"The Banyan Tree" 31
 db #00
;"Swimming Pool" 32
 db #00
;"Halfway up the East Wall" 33
 db #00
;"The Bathroom" 34
 db #00
;"Top Landing"  35
 db #00
;"Master Bedroom" 36
 db #00
;"A bit of tree" 37
 db #00
;"Orangery" 38
 db #00
;"Priests' Hole" 39
 db 11100000b       ;<<<<<<<<<<<<<<<
;"Emergency Generator"  40
 db #00
 db Jones will never believe this"  41
 db #00
;"The Attic" 42
 db #ff      ;<<<<<<<<<<<<<<<
;"Under the Roof" 43
 db #00
;"Conservatory Roof" 44
 db #00
;"On top of the house" 45
 db #00
;"Under the Drive"  46
 db #00
;"Tree Root"  47
 db #00
;"[" 48
 db #FF    ; no sprite data       ;<<<<<<<<<<<<<<<
;"Nomen Luni" 49
 db #00
;"The Wine Cellar" 50
 db #00
;"Watch Tower" 51
 db #00
;"Tool Shed" 52
 db #00
"Back Stairway" 53
 db #00
;"Back Door" 54
 db #00
;"West Wing"  55
 db #00
;"West Bedroom" 56
 db #00
;"West Wing Roof" 57
 db #00
;"Above the west Bedroom"  58
 db #00
;"The Beach" 59
 db #00
;"The Yacht"  60
 db #00
;"The Bow"  61
 db #00

The data followed by ;<<<<<<<<<<< is indicating values that are NOT zero

 

 

 

 

 

Edited by Norman Sword
corrections - and probably more to come
Link to comment
Share on other sites

supposed to say #80e0- When I write these routines I do not have the original data. I have my own and I do not use direct memory references, I have to work backward and calculate where the original might have been. Yes it should be INC A. I will slowly correct whatever I see as being incorrect. It does however work as seen. The problems arise most of the time from having to change most of the code to fit in with the original data/layout.

So I will do another edit/update and change the { inc b } to { inc a } 

Link to comment
Share on other sites

Yes a 256 loop when b=0 with DJNZ. The edits I do when I change the code from the original (as written in my own version) to the version that is seen above. Create more problems as I go along. I constantly change the code from the original layout, without any checking/testing. Sometimes those modification create all the subsequent edits I need to do. I think it is 99% there.



 

 

 

 

 

 

 

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.