Jump to content

Norman Sword

Member Since 08 Mar 2017
Offline Last Active Jan 31 2019 10:54 AM

Posts I've Made

In Topic: How Fast Can Willy Play

25 January 2019 - 08:15 AM

The remnants of a deleted post.Simply because its content was misinterpreted. 

A simpler response.

The game file included at the end of POST #1 is the only version.

All other versions of JSW VL5 DEMO and the slight revisions have been deleted.


In Topic: Cheat Table in CPC amstrad version of JSW2

25 January 2019 - 07:48 AM

Amsrad CPC Jet Set Willy.

Cheat invocation. Any room and stood on the lower floor. This will be reset by any key that is not part of the cheat code.

I have invoked this several times recently. All done in the bathroom. The easiest way to invoke. (but it will freeze the game) is to make the assumption that it could be either of the cheat codes I have mentioned. 

press <space> this will clear the cheat buffer


then type in the longer of the two cheat codes-   <HIEMMRAIDNAPRRRTT>


From this point onward, game abort, will take you to the cartography room. This was designed as a cheat, To actually abort the game you need to loose all your lives. Break while playing the game will draw the cartography room.

A big if here. If the cheat mode worked, the cursor on the screen can be moved around the map. When over a room on the map that is the target/designated room that it is desired to go to, press <enter>


The cartography room will disappear and the selected room will be displayed.


The cursor will again be flashing and again it can be moved. The cursor this time is indicating the position Willy will be drawn in the room. Press <ENTER> and the game will resume with Willy at the designated position.

The above is what is supposed to happen.  (after invocation of the cartography room and its cheat)

The first problem concerns the inaction of the keyboard to input. This could be just configuration problems. But since I could not on my brief test get the cursor in the cartography room to move, the game was locked onto that screen. (so progress to the next part did not happen) 

The next problem, one I did not get as far as testing. Is that table of corrupt data. The code in the cartography room uses the data to find what room you are selecting as you move around the map. Very simple code. The little squares on the map are simply counted off (the squares indicating rooms) by starting in the top left hand corner and scanning each line to find a room square. If it finds a square it then steps one byte through the cheat table. If the cursor is flashing over the square picked and <enter> is pressed, it takes the value in the cheat table, and uses that as the new room number. Otherwise it just keeps scanning through the cartography room and stepping each time it finds a marked square indicating a mapped room. When it reaches the end of the screen, it knows you did not select a room, and loops through the movement code again.

The cheat table is a list of the rooms as defined in the cartography room. Without that table, the data is random. What happens is the room is selected and the selected room should be drawn. The code looks up the room number and (in most cases) draws a pile of junk on the screen. Which indicates to me that the room number extracted from the cheat table is higher than the room count. So in most cases the cheat table must have values over 140ish , which are room numbers outside of the game data.

At other times if it finds data that is within the room number total it draws the room that corresponds to that number. Since this is basically a random room number. We get shown a random room in the game. This mismatch between the map and the room shown, makes the cheat worthless. 

The problems I am encountering now, seem to be greater than the problems encountered five of six years ago. Which is why I assume that the inability to move in the cartography room is a configuration problem only.



Its not Escape that quits to the title screen! :D , will retest with various other keys although the fact he says "another key or two" is going to make it more difficult. Praise for snapshots for quick reloading!


As an aside there is talk of memory constraints, although it would potentially only save a 'few bytes' both the AMS and ZX versions with keypad intact have a blank page with a 'Press enter to continue' line, rather than like say other games with keypad protection (ZX at least) that immediately take you to the entry page. All I'm saying here is a few precious bytes *could* of been saved by not having this slightly un-needed page/pause before code entry ? :)


The only sensible next test I can think of is to try it on my real CPC464 although I'd need to sort out the tape image (tzx/cdt to mp3/wav or something) and use that rather than use my original but re-release tape, mind you that would be quicker. This way I can rule out key mapping concerns, as its not ESC it may be CLR but that does not  work either.


 As stated above it is indeed the break key, that invokes the cheat jump into the cartography room.

One of the many flaws of Matthew Smith's game  (spectrum) is the way it asks for a colour code. If you run the game in an emulator you will find that it will ask for the same code on every single game that is played. It will even ask for the same code on the second attempt. Every time the game is played. This is due to usage of one of the spectrum's variables as its random number seed. Since this is fixed on every load of the game when using an emulator, that is why you get asked the same input code. This problem is not a new problem, it existed back in the 80's. You can save a snapshot of the game. If the snapshot saves the system variable, then the game will ask for the same code every time it is loaded via a snapshot.

The simplest method of stopping that simple problem is to force the user to have some interaction with the game before asking for the input code. So to update the variable it would have been better if the simple question/statement had been presented to the game player. Which is <Press enter to continue> or something similar. To stop this question being negated by pressing enter as the game is loading,. Which would immediately upon completion of loading  bypass the question, because the <enter> key is being pressed. You set up the loop to wait for its release as well. The wait for key and wait for key release will generate a better random number, and a snapshot will still ask for a new colour code on every run. Even the modern versions run on an emulator would give a new number on each run of the game...

The above is why the Amstrad version asks for the user to press a key. All the time the question is on the screen the games code is changing the value of the code to ask. If the end user has enough skill to bypass this code  (asking for enter to be pressed), you can assume that he is or she is already delving into the code. 


Searching for the cheat code activation text. Derrick thinks that the code might be written backwards, and even have a simple addition of setting bit 7 on the letters. Any decent debug/monitor allows the toggling of ASCII in its output display. The setting of bit 7 on ASCII is a common practice, and the debug/monitor should  permit you to see the ASCII from values over 128 by toggling the display output.  



The hacking of the game for infinite lives will also make it impossible to exit the game once cheat is invoked.
(if it worked)


In Topic: Cheat Table in CPC amstrad version of JSW2

23 January 2019 - 11:29 PM

The whole scope of this topic is the missing Cheat code table on the CPC Amstrad.


Information direct from Derrick.

The conversion from CPC Amstrad back to the spectrum, involved a game redesign. The CPC has an interrupt set for every 300th of a second. These are arranged to occur on frame flyback and five others per frame. This enables the screen to be recoloured on every screen frame. The top part of the screen has one set of four colours, and the lower part of the frame has another set of four colours. The interrupt is supposed to occur as the raster passes over the screen in the area of the room name. So the room name area has two colours that are common to both the upper part of the screen and the lower part of the screen. This enables the game to have six colours in some rooms. (in 4 colour mode)

The game uses xor on and xor off. One of the advantages of this method is that it is fast, another advantage is that the Amstrad game does not then need to have any copy screens.  This means that the sprite is erased on the visible screen and for a moment it is possible to see the difference between the new and old sprite. Think about the spectrum and the way It was pointed out the jagged finger effect. The visual affect of xor ing off a sprite and xor ing on a new sprite makes that effect look tame. You end up with a very visible jerking or tearing on the large sprites. The worst offender is the three sprites joined together to make the large skull. Drawing that looked a mess. What would normally happen in this type of update, would be the game waits for a specific interrupt and then tries to beat the raster before it overtakes the drawing routine. Instead of possibly waiting nearly a whole frame for a specific interrupt, Derrick decided to uses the interrupts as a screen position indicator. Then only wait then, if the raster would overtake the sprite while it was being xor'd on and xor'd off. A very slight change but a dramatic change in the visuals.

The point of part explaining the XOR on,  XOR off problem. Is to partially explain why that could not happen on a rewrite from the Amstrad back to the spectrum. The spectrum needed to have a copy screen to stop the problems of screen updates. A copy screen uses a big chunk of Ram, and this game was being converted from a 64k amstrad to a 48k spectrum. All un-needed code was immediately deleted. The first deletion was all the cheat code.

The 2nd problem of moving from the CPC to the spectrum was collision detection. The CPC has pixels with colour. This is changed to the spectrum having pixels that are coloured via an attribute overlay. The CPC used the colour of each pixel for its collision detection. In essence a white pixel under a sprite indicates a collision. The spectrum has to use a whole new logic to detect a collision. And that new logic made a need for a copy screen to be implemented

Collision detection moved from sprite drawing on the cpc, to sprite collision based only on Willy on the spectrum. This was a major change in collision detection. 


So any time I mention cheat code on an original from the CPC or the cheat code in JSW2 . You can immediately assume I am not including any spectrum version of JSW2. 

So only two tape versions written for the CPC. And only one tape version written for the spectrum.

Any spectrum version that does not include the colour code input question is also a hack of the original, in the same manor as the hacks generated for the Amstrad versions. But in the spectrums case, there was no mysterious data to worry about.



In Topic: Free space and code optimisation in Manic Miner

23 January 2019 - 01:29 PM

STEP2_INDEX: is/was used by another routine as you suggested.

The unused bits. The routine was written to encompass change in the data. So the length of each data table was selected to enable editing. 3 bits for time and five bits for pitch change. The subroutine contains an "AND 31" which is handy for the pitch change data. No point in adding another instruction somewhere just to reclaim the bit that is/was not used in the data. 

The notes length still needed to have an "AND ?" added somewhere, and here I felt the editing of the data was unlikely to add longer notes. So "AND 3" was selected and then the additional bit was free. The point of including the statement that this is unused. Was to emphasize that the bit is available if wanted. and the "AND 3" can be changed to "AND 7" and additional note lengths can be added.

I can think of no use for the spare bits, apart from the what they were originally designated to be used for.





In Topic: Cheat Table in CPC amstrad version of JSW2

23 January 2019 - 11:24 AM

I delved briefly into the Amstrad world again. Just not welcoming enough to pursue further.

As shown I managed to get as far as invoking the cheat. To progress further I needed to move the cursor etc. This did not happen. Every time I ran the program on this particular emulator, it managed to place the interrupts in the wrong place (hence the yellow band across the screen)  

Five emulators later and several versions of JSW tried, I lost interest. The emulators and their presentation/interface does not inspire any interest to me. I will stick with an emulated spectrum.

The cartography room on the small 60 room version- Does not need to have the room name in memory, only the data for the rooms.  I would expect the data to be just tagged onto the end of the 60 rooms. On examining that area on the emulated Amstrad , all I found was a message saying "What's this then".....

Typing in the cheat on the 60 room version has no effect.

Derrick has stated that only two tape versions of JSW exist (master taped by him) and any other version was not mastered by him and must be an edited version- (scope of editing being how the game loads)

And I myself will not be looking any further into this.