Jump to content
Jet Set Willy & Manic Miner Community

Norman Sword

Contributor
  • Posts

    596
  • Joined

  • Last visited

Reputation Activity

  1. Thanks
    Norman Sword got a reaction from jetsetdanny in [File] Manic 40 Miner   
    The wording 

    This means this version contains 40 caverns, starting with the original 20 caverns, then continuing on with another 20 caverns originally desisigned by Ligan. (of those 20 caverns, some have been redesigned by me)

    was added to the main description
  2. Thanks
    Norman Sword got a reaction from Spider in [File] Manic 40 Miner   
    The wording 

    This means this version contains 40 caverns, starting with the original 20 caverns, then continuing on with another 20 caverns originally desisigned by Ligan. (of those 20 caverns, some have been redesigned by me)

    was added to the main description
  3. Like
    Norman Sword got a reaction from IRF in [File] Manic 40 Miner   
    The wording 

    This means this version contains 40 caverns, starting with the original 20 caverns, then continuing on with another 20 caverns originally desisigned by Ligan. (of those 20 caverns, some have been redesigned by me)

    was added to the main description
  4. Like
    Norman Sword got a reaction from IRF in Manic Miner: The Lost Levels   
    The above pokes - demystified into actual Z80 code
     

    opcode                    address                 address                  comment
                                    hex #8F85             decimal 36741    ; note:- listed one byte earlier
    call #90fe               ;#cd,#fe,#90                                      ; the original call to the score routine
    changed to
    call #9352              ;#cd,#52,#93         ;205,82,147         ; note:- the call opcode is included here

    this routine is a copy of the Item collect sound in Jet Set Willy
    opcodes                ;address              ;address
    ;                             ; hex                     ; decimal
    ;                             ;#9352                 ;37714

    ld a,(#8073)          ;#3a,#73,#80      ;58,115,128              ; get border colour
    ld c,#80                 ;#0e,#80              ;14,128                   ; set loop counter (duration)
    sfx:
    out (#fe),a             ;#d3,#fe              ;211,254                  ; set border + ear + mic
    xor #18                  ;#ee,#18              ;238,24                   ; toggle ear + mic bits
    ld e,a                      ;#5f                     ;95                          ; save the border + ear + mic state in {e}
    ld a,#90                 ;#3e,#90             ;62,144                    ; calculate a pitch
    sub c                      ;#91                    ;145
    ld b,a                      ;#47                   ;71                            ; the calculated pitch to {b}
    ld a,e                      ;#7b                   ;123                          ; restore border + ear + mic back from {e} to  {a}
    sfx_loop: 
    djnz sfx_loop          ;#10,#fe             ;16,254                   ; loop (delay) for the pitch
    dec c                       ;#0d                  ;13                           ; decrease the time counter
    dec c                       ;#0d                  ;13
    jr nz,sfx                   ;#20,#f0           ;32,240                    ; keep looping till out of time, {c}=0

    jp #90fe                 ;#c3,#fe,#90     ;195,254,144            ; jump to the score routine
     
    Addendum.
    the JSW sound routine uses absolute address's for picking up the border colour. The actual routine uses relative jumps thoughout. This means this routine can be placed at any address, without having to change any of the routines data. The only change would be calculating the actual address that the routine sits at.

    Addendum 2
    A re-write can shorten the above 24 byte routine by 3 bytes. (I have not listed the re-write)
     
  5. Thanks
    Norman Sword got a reaction from Spider in Manic Miner: The Lost Levels   
    The above pokes - demystified into actual Z80 code
     

    opcode                    address                 address                  comment
                                    hex #8F85             decimal 36741    ; note:- listed one byte earlier
    call #90fe               ;#cd,#fe,#90                                      ; the original call to the score routine
    changed to
    call #9352              ;#cd,#52,#93         ;205,82,147         ; note:- the call opcode is included here

    this routine is a copy of the Item collect sound in Jet Set Willy
    opcodes                ;address              ;address
    ;                             ; hex                     ; decimal
    ;                             ;#9352                 ;37714

    ld a,(#8073)          ;#3a,#73,#80      ;58,115,128              ; get border colour
    ld c,#80                 ;#0e,#80              ;14,128                   ; set loop counter (duration)
    sfx:
    out (#fe),a             ;#d3,#fe              ;211,254                  ; set border + ear + mic
    xor #18                  ;#ee,#18              ;238,24                   ; toggle ear + mic bits
    ld e,a                      ;#5f                     ;95                          ; save the border + ear + mic state in {e}
    ld a,#90                 ;#3e,#90             ;62,144                    ; calculate a pitch
    sub c                      ;#91                    ;145
    ld b,a                      ;#47                   ;71                            ; the calculated pitch to {b}
    ld a,e                      ;#7b                   ;123                          ; restore border + ear + mic back from {e} to  {a}
    sfx_loop: 
    djnz sfx_loop          ;#10,#fe             ;16,254                   ; loop (delay) for the pitch
    dec c                       ;#0d                  ;13                           ; decrease the time counter
    dec c                       ;#0d                  ;13
    jr nz,sfx                   ;#20,#f0           ;32,240                    ; keep looping till out of time, {c}=0

    jp #90fe                 ;#c3,#fe,#90     ;195,254,144            ; jump to the score routine
     
    Addendum.
    the JSW sound routine uses absolute address's for picking up the border colour. The actual routine uses relative jumps thoughout. This means this routine can be placed at any address, without having to change any of the routines data. The only change would be calculating the actual address that the routine sits at.

    Addendum 2
    A re-write can shorten the above 24 byte routine by 3 bytes. (I have not listed the re-write)
     
  6. Like
    Norman Sword got a reaction from jetsetdanny in Manic Miner: The Lost Levels   
    The above pokes - demystified into actual Z80 code
     

    opcode                    address                 address                  comment
                                    hex #8F85             decimal 36741    ; note:- listed one byte earlier
    call #90fe               ;#cd,#fe,#90                                      ; the original call to the score routine
    changed to
    call #9352              ;#cd,#52,#93         ;205,82,147         ; note:- the call opcode is included here

    this routine is a copy of the Item collect sound in Jet Set Willy
    opcodes                ;address              ;address
    ;                             ; hex                     ; decimal
    ;                             ;#9352                 ;37714

    ld a,(#8073)          ;#3a,#73,#80      ;58,115,128              ; get border colour
    ld c,#80                 ;#0e,#80              ;14,128                   ; set loop counter (duration)
    sfx:
    out (#fe),a             ;#d3,#fe              ;211,254                  ; set border + ear + mic
    xor #18                  ;#ee,#18              ;238,24                   ; toggle ear + mic bits
    ld e,a                      ;#5f                     ;95                          ; save the border + ear + mic state in {e}
    ld a,#90                 ;#3e,#90             ;62,144                    ; calculate a pitch
    sub c                      ;#91                    ;145
    ld b,a                      ;#47                   ;71                            ; the calculated pitch to {b}
    ld a,e                      ;#7b                   ;123                          ; restore border + ear + mic back from {e} to  {a}
    sfx_loop: 
    djnz sfx_loop          ;#10,#fe             ;16,254                   ; loop (delay) for the pitch
    dec c                       ;#0d                  ;13                           ; decrease the time counter
    dec c                       ;#0d                  ;13
    jr nz,sfx                   ;#20,#f0           ;32,240                    ; keep looping till out of time, {c}=0

    jp #90fe                 ;#c3,#fe,#90     ;195,254,144            ; jump to the score routine
     
    Addendum.
    the JSW sound routine uses absolute address's for picking up the border colour. The actual routine uses relative jumps thoughout. This means this routine can be placed at any address, without having to change any of the routines data. The only change would be calculating the actual address that the routine sits at.

    Addendum 2
    A re-write can shorten the above 24 byte routine by 3 bytes. (I have not listed the re-write)
     
  7. Like
    Norman Sword got a reaction from Spider in [File] Jet-Set Willy II PC   
    Your cartography room shot, is missing the trip switch room/block. Which indicates it has not been registered as visited and also the item not collected.
  8. Like
    Norman Sword got a reaction from jetsetdanny in [File] Jet-Set Willy II PC   
    Your cartography room shot, is missing the trip switch room/block. Which indicates it has not been registered as visited and also the item not collected.
  9. Wow
    Norman Sword got a reaction from Spider in Maps   
    The 147 rooms (in 48k) for jsw2+
















  10. Haha
    Norman Sword reacted to DigitalDuck in Why was Manic Miner never properly optimised?   
    Manic Miner Redux supports many thousands of rooms.
    (What? The original post never mentioned "Spectrum"...)
  11. Thanks
    Norman Sword got a reaction from Spider in Why was Manic Miner never properly optimised?   
    Was not aware Matthew wrote any other versions. Ist line I wrote
    Apologies to the original person who modified Matthews code. (see below)

     
  12. Thanks
    Norman Sword got a reaction from Spider in Why was Manic Miner never properly optimised?   
    JSWED has NO optimisation of code/data space in Manic Miner. It is a very simple data editor. So my statement still stands.
     
  13. Thanks
    Norman Sword got a reaction from Spider in Why was Manic Miner never properly optimised?   
    Apologies to the original person who modified Matthews code. (see below)

    Last week I wondered why Manic Miner has been left languishing as a little used format for code change. It seems the vast majority of game edits use the 64 room game version of Jet Set Willy as the basics for new games, and Manic Miner seems to have, in the main, been ignored.
    The limited scope of Manic Miner might be the reason, just 20 caverns, whilst JSW manages a max of 64 (on a 48k zx spectrum)

    I wondered if it was or would be easy to write a piece of code that compacted the game slightly. I personally have no need for such gimmicks. If I need more space, I will just rewrite the code. A quick rewrite as demonstrated in Manic 40 Miner takes very little effort. But I task myself with just writing code for the sake of writing code so, how hard is a universal compaction piece of code for Manic Miner?

    The answer is it took me a couple of hours to write a routine that compacted the game. It was at that point I delved into archives looking for versions to try my code on. That was when I discovered that the great multitude of Manic Miner versions I wanted to test my code on did not exist.  
    I modified Matthews original code with no problem.
    I modified some other version - but that had no need of the addition I added (e.g. the font change)
    I knew of a recent listed modification of Matthews Manic Miner and that was used as a basis for demonstrating what the code I wrote could do.

    The version I decided to modify was Manic Person (human Version).
    So included here is a demonstration of the game -- Manic Miner -- Modified by a simple (for me) piece of code that does basic code modifications to the game.
    The demo does go a bit further and uses the freed space. The text added is deliberately long winded --- (it is just a demo of what can be done)
    The included demo - will be deleted in a week. It is NOT a version that is available for general public release. 
     
    and has now been deleted -----  New code has been added (see addendum)- the new code is just the original Manic Miner
     
    Let the demo play through to the final cavern and on---

    Ending the post.
    The universal code I wrote is in a format that will modify the basic code of Manic Miner and then return to Basic or Enter the modified game code and play the game.
    That code is not included here.
    The big question I ask myself is. Why has no one bothered to do this simple task? As stated elsewhere the code took just a few hours.


    ADDENDUM.
    Since this was missing a file demonstrating what I was talking about.  A non edited version of Manic Miner has been run through my optimisation routine.
    Wait until the end of the 20 caverns to be displayed in the demo mode.  THE text is in addition to other optimisations that have been performed. Note - this program has not been edited to fix any other code- so the pause bug and any other original problems, may still exist.
     
     
    MANIC-C.TAP
  14. Thanks
    Norman Sword reacted to Spider in Playing around with the in-game tune in JSW   
    Nopping out #8B47 and #8B49 would do but its too fast then. So...

    XOR A                            ;8B3C      ;                  clear the inactivity timer at L85E0      LD (inactivity),A            ;8B3D      ;L85E0     LD D,A                           ;8B40      ;                   initialise the mSB     LD a,(game ticker)       ;8B41      ;L85CB        the game ticker at 85CB     AND 1                            ;8B44      ;                   issolate odd or even game ticker bit     LD HL,(ingame_music) ;8B46      ;L865F        set HL to the music offset pointer     LD E,(HL)                       ;8B49      ;                   get the present offset     ADD A,E                        ;8B4A      ;                   add the ticker (odd/even) value     LD (HL),A                      ;8B4B      ;                   store the updated offset    NOP                              ; 8b4C      ; back to the original code    LD HL,ingame_music    ;8B4D     ;L865F    ADD HL,DE                    ; 8B50    ; >>> HL IS POINTING AT THE NOTE value
  15. Haha
    Norman Sword reacted to IRF in Playing around with the in-game tune in JSW   
    Actually Andy, you might need to think again there. Did you actually try that out? Because looking at it again, E isn't actually updated when the tune note index is increased, so when DE is added to HL (the second definition of HL) at #8B50, it won't pick up the new note during the current pass through the Main Loop.
    So you would need to use that spare, NOPped out byte at #8B4C for a LD E, A instruction.
    Edit: Thinking about it, the effect of E not being updated straight away probably just means that the tune will be playing 'one note behind'. It should play at the right speed. But the first note (first pitch value) will only play half as long as it should when you start playing the game. (And the normal fix for that - setting the music note index to #FF during game initialisation - won't work this time; I think that would cause the last note of the tune to be played during the first pass through the Main Loop.)
  16. Thanks
    Norman Sword got a reaction from Spider in [File] Manic Panic   
    Refreshing file.
  17. Like
    Norman Sword got a reaction from Spider in [File] Manic Panic   
    I have added a graphic change for the final toilet run. 

    I added a blank item check into the code, and left it. A blank item will be filled with junk graphics. This makes blank items visible (in case a blank item crops up!)

    Changed the title picture. That can now be aborted with "HJKL<enter>" or held on screen with "YUIOP"

    Changed the screen display pause in attract mode . Held with "YUIOP" abort with "HJKL<enter>"

    Items flash and item draw have been changed.
    -----------------------------------------
     

     
    MW-V1-1.tap
  18. Like
    Norman Sword got a reaction from MtM in [File] Manic Panic   
    There is an update. Needed to circumvent another piece of the original data. 

    All rooms are numbered 0 to 63. Due to the way the original code uses or #c0 the top two bits are set to arrive at the room base address. My code does a simple calculation and indexes into an address list. Every room has data that follows the same format of being under 63 for the up/down/left/right exit.  That is until we arrive at the corrupted data in the normally unreachable rooms. Matthews code does not care what data it is given it will always arrive at a room number that is effectively from #c000 to #ff00 stepping one page at a time for all 64 rooms. My code however will calculate the room number as defined and unfortunately due to the corrupt rooms will calculate the position of junk room data. A bit like the arrow problem. Once an illegal room has been visited, the game goes eh up sgshd egfgf  noxt roosm. etc.

    The update to fix the room problem also added updates to stop speed flicker/judder by inserting an optional frame sync. Which might be unobtainable on some keyboards. Due to the inability to properly scan multiple key combinations. --- Can/could switch the option, to <on> by defalut. At present it is <off> by default. Or I can change the key combinations or reduce the key combinations to only 2. --- At present set as <A> <S> <D>, which will also invoke pause. The screen will indicate that those keys are being pressed.(during game play) The status indicator for the sync being active or inactive is the colour of the letter <I> from the line <Items Collected ...
    The colour is normaly the same as the end of the same line (blue) . When frame sync is active the colour will change from blue to Magenta.  A side effect of frame sync is a reduction in speed.  So typically the speed goes from
    slowest (music + frame sync)         14.4
    medium (music)                                13.28
    fast (no music+ frame sync)            12.7
    fastest(no music+ no frame sync) 11.08. 
    The timing is my standard double room walk.  The change in speed is the effect of rounding up frame times, when sync is applied. In some rooms it will seem to have little effect in others it will drop the game speed noticeably.




    No graphic change to the program. Although the method of storing the room data has been changed. 

    ------------------------------------

    I spent a day writing a visual display of how I plan on compacting the data further. This program has the output files that it creates deleted. All 3 files need to be in the same directory. The two data files are the data files generated by 1) the key data    2) all 64 rooms .eg.g JSW from #c000 to #ffff. 

    This show the data being compacted by over 50% - Not quite good enough for what I want.


    This has been posted before I have had the chance to append any files. 

    The files will be appended one by one

    The picture shows the output of the program. (all values in hex)
    1) the numeric value of each tile
    2) the graphic output
    3) Item positions (in pairs) the first value is the offset from the start of the room, the second value is where the data is in the key table
       above 3) is the count of each tile (in present room) data at the end of the line is the new compressed tile index and the graphic colour
    4) present sprite data
    5) each tiles index as generated by checking previous room data
    6) the list of acquired data - in colour if being a tile drawn in current room
    7) vertical compression/ horizontal compression/ stored count/original
    Lots of other data concerning compaction of room names etc.
     


     

    MW-V1-1a.tap n_rooms2.zip
  19. Thanks
    Norman Sword got a reaction from Spider in Pokes (Spectrum Version)   
    I will again state. It is possible to run Manic miner and return to basic. On returning to basic it will still be possible to poke the game and again enter MM ( and if needed keep on repeating the loop of running the game and returning to basic). All the basic that was in memory before running MM will still be there. Because certain members on here do not have the skill needed to do this does not preclude others from doing so. (e.g. I can if I wanted, do the modifications needed. But I have no intention of doing so. ) in the 30+ years since MM was written I have had no need to do so, and I still have no need to do so. 


     
  20. Like
    Norman Sword got a reaction from MtM in [File] Manic 40 Miner   
    View File Manic 40 Miner
    Manic 40 Miner

    This file is posted elsewhere --- 

    Moved here because I found it very difficult to find --- 



    After I stopped developing the JSW128  VK VL VM   engine. I spent a week writing a version of Manic Miner called  Manic 40 Miner.
    This does not contain any new rooms. They are the original and Ligans rooms.

    This means this version contains 40 caverns, starting with the original 20 caverns, then continuing on with another 20 caverns originally desisigned by Ligan. (of those 20 caverns, some have been redesigned by me)

    NOTE this runs in 48k the same as the original.

    This has a built in part game editor ---- Not enough space to add more scope, when the room/cavern count has been doubled.
    ----------------------------------------------------------------
     

     
     
    Submitter Norman Sword Submitted 04/11/2023 Category Manic Miner [Remakes]  
  21. Thanks
    Norman Sword got a reaction from jetsetdanny in [File] Manic 40 Miner   
    View File Manic 40 Miner
    Manic 40 Miner

    This file is posted elsewhere --- 

    Moved here because I found it very difficult to find --- 



    After I stopped developing the JSW128  VK VL VM   engine. I spent a week writing a version of Manic Miner called  Manic 40 Miner.
    This does not contain any new rooms. They are the original and Ligans rooms.

    This means this version contains 40 caverns, starting with the original 20 caverns, then continuing on with another 20 caverns originally desisigned by Ligan. (of those 20 caverns, some have been redesigned by me)

    NOTE this runs in 48k the same as the original.

    This has a built in part game editor ---- Not enough space to add more scope, when the room/cavern count has been doubled.
    ----------------------------------------------------------------
     

     
     
    Submitter Norman Sword Submitted 04/11/2023 Category Manic Miner [Remakes]  
  22. Thanks
    Norman Sword got a reaction from Spider in [File] Manic 40 Miner   
    View File Manic 40 Miner
    Manic 40 Miner

    This file is posted elsewhere --- 

    Moved here because I found it very difficult to find --- 



    After I stopped developing the JSW128  VK VL VM   engine. I spent a week writing a version of Manic Miner called  Manic 40 Miner.
    This does not contain any new rooms. They are the original and Ligans rooms.

    This means this version contains 40 caverns, starting with the original 20 caverns, then continuing on with another 20 caverns originally desisigned by Ligan. (of those 20 caverns, some have been redesigned by me)

    NOTE this runs in 48k the same as the original.

    This has a built in part game editor ---- Not enough space to add more scope, when the room/cavern count has been doubled.
    ----------------------------------------------------------------
     

     
     
    Submitter Norman Sword Submitted 04/11/2023 Category Manic Miner [Remakes]  
  23. Like
    Norman Sword got a reaction from Spider in JSW engine should pause briefly when you die   
    Doing the drop through the Security Guard gains no advantage.  The Wine Cellar still needs to be completed. And can not be completed in reverse.So what exactly are the benefits of using a life to gain no advantage.

     
  24. Like
    Norman Sword got a reaction from jetsetdanny in JSW engine should pause briefly when you die   
    Doing the drop through the Security Guard gains no advantage.  The Wine Cellar still needs to be completed. And can not be completed in reverse.So what exactly are the benefits of using a life to gain no advantage.

     
  25. Thanks
    Norman Sword got a reaction from MtM in conveyor Slide platforms   
    Just placing this at the start of a heading - so it is not swamped (or ignored). This replaces the code I deleted.

    I am nearing  70 and I leave for a quite life. Whilst I will still write code, it will be just for my own amusement. 

    All Needed data are contained within the file.
    slide_platform.tap
×
×
  • Create New...

Important Information

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