File Name: JSW Builder Editions
File Submitter: Spider
File Submitted: 17 Jul 2017
File Category: Tools and PatchesSystem: Sinclair
Original Author(s): Matthew Smith
Third Party Author(s): Andy Ford
These are a selection of various 'trimmed' game files to remove unused and otherwise potentially unwanted routines and data, resulting in more free space for other potential uses.
There are six levels of 'build' with incrementing removal:
- Level 0: "Trim Base". This only the bare minimum and is a new level
- Level 1: "Trimmed". See list below
- Level 2: "Sprites" All of Level 1 plus consolidated sprites, please refer to the screenshot and the support topic for further information
- Level 3: "Rooms" All of Levels 1 and two plus consolidated room data. Again please refer to the topic
- Level 4: "Timers" All of Levels 1,2 and 3 plus removal of the clock and pause routines. Refer to the details further down this description
- Level 5: "Teleport" All of Levels 1,2,3 and 4 plus removal of the 'Writetyper' routines, again refer to the description
Level 0 has no keypad routines (as per level 1) and the Attic Bug fix, pause mode bug fix and 'empty' rooms set as per Level 1. No other changes. It is in effect "Level 1 without routine removal"
Level 1 has no keypad entry routines, keypad text strings, keypad codes, keypad graphics and attributes. The startup routine was shortened too. Room 47 was set to be empty (black border, no title and all exits set to room 0). Rooms 61,62 and 63 were also treated in this manner too, to make them more friendly to edit via JSWED.
The list of routines is as follows:
33089-33279 Unused rope entity data
33622-33633 Unused rope animation table (1)
33750-33791 Unused rope animation table (2)
33802-33823 Startup code (space free with shortened startup code)
34187-34250 Keypad messages string
34463-34761 Keypad display and reading routines
35345-35365 Screen flash routine from Manic Miner
37819-37840 Vertical guardian attribute routine from Manic Miner
38644-38679 Redundant development code
38680-38911 Empty data
39680-39935 Keypad key graphics and background attributes
39936-39999 Remnants of source code
40448-40626 Keypad entry codes
40627-40959 Unused code purpose unknown. Likely guess is part of a screen buffer routine
42624-43775 Unused data
Levels 2 and 3 please refer to the screenshots and the support topic for details on these.
Level 4 'Timers' has the following removed too:
34181-34186 Clock text string
35377-35388 and 35410-35498 Clock routines
35522-35531 and 35534-35562 Pause routines
35563-35589 Pause colour cycling
Level 5 'Teleport' in addition to the items above also has the following removed:
34277-34298 Writetyper string
35696-35837 Writetyper key routine
Seven tape files are included. These are the five 'levels' as well as an 'easy to edit' Basic loader that mimics the original JSW one. The 'level' tape files do not include the 'easy to edit' loader, they have a very basic loader as they are designed to be further edited rather than be 'complete'
The seventh file is a small additional "bonus" a 'trimmed' game with 25 room and 50 objects is also present with an accompanying map too. It is saved as only the data required, so in order to edit it if needed you'll need to load it and then save it as 32768,32768. The reason for the shorter code was merely to only load what was required. It is possible to save from a higher address if you are willing to insert a 255 / #FF at a certain point however the small saving from this is negated by the few bytes needed to insert it and also ensure the space around it is empty.
Note that there are no bug fixes applied to these builds either as it is anticipated the builder will be applying their own patches as required. The only exceptions to this is the 'Attic Bug' fix (55901,82) and the pause bug fix (35615,62 + 35620,219 + 35621,254 + 35518,0) , these were applied as they are potentially fatal if left intact, the 'Attic Bug' especially as it can cause corruption that if editing the game via a snapshot may not be immediately noticed.
The first three 'pause bug' fix pokes are courtesy of Richard Dymond who's excellent JSW disassembly proved invaluable to assisting in building these files. The last poke was something I added to disable the inactivity timer incrementation itself, the 'effect' of this is simply to prevent an automatic pause. No pause (unless user selected) = no pause bug.
Regarding the available space in general it should be noted that although usable some parts of it will likely require you to insert a JP to 'jump over' it, an example being the gap in the main loop or in other routines moving a RET from the end of the 'gap' up to the last real instruction. It should be relatively straightforward to find and do this. the reason it was not done in the builds was to keep the code unaltered as far as sensibly practical.