-- Ideas for 2.3.x: --

[DONE] Cannot set cells in a variant Z game (and maybe others?) to global cell
 classes.

[DONE] Patch the game engine in variant Z with the fix for looking up global
 cells (see message 6296:

  7:#DD4C             10
  7:#DD52       11 09 f5 7a fe 04
  7:#DD58 20 03 21 0f f5 f1 15 20
  7:#DD60 ef 21 4a 80 23 c9

* [part done] Positioning diagonal guardians is well wacky.
	- In JSW64, at least, the diagonal-bounds cursor now follows the
	 pointer, which is something.

* [DONE] Ability to slow the animation down (1/2, 1/3 etc.).

* [DONE] Ability to stop the animation altogether.

[DONE] Export & import for fonts.


* Add SZX support http://www.spectaculator.com/docs/zx-state/intro.shtml
 - This is necessary to support custom ROM images.
 - It may also allow JSWED metadata to be saved in a snapshot.

* When doing the 'bottom-third' attribute editor, try to make it a little 
 more realistic rather than using a fixed font.

* Leave hex page to main menu; blinking cursor remains.

* Atari PRG support (as a subclass of JSW48)

* Editors for misc attributes / sprites: Maria, toilet, barrel...

* JSW2 editor crashes if you (say) look at room 120 and then set room count
 to 119.

* Problem loading JSW2. It can manage snapshots, but when trying to load and
 decrypt the TAP file it ends up without the proper startup code.
	-- This particular TAP file has a loader which goes:
		DI
		LD	SP,57BFh
		LD	HL,61A8h
		LD	DE,61AEh
		LD	A,0
		...



[DONE] Redesign the screens for 800x600
	>> JSW48		OK
	>> JSW128		Looks OK
	>> JSW64		OK
	>> JSW2			OK
	>> Manic Miner		OK
	>> Henry's Hoard	OK

7. Music editors: JSW48, JSW128, etc.

8. Import and export.

	-- [30-11-2005] Tried to wake this up.
	  Export and then import JSW64(V) as test64.xml, importing the Off
	 Licence over the Bathroom.
	 [DONE]  * Rope swing table overwritten.
	 [DONE] * Edit jsw64v.tap. Import test64.xml at room 66, then at 
                  room 33. jswed segfaults; caused by double-freeing a pointer.
	  * Importing rooms with no hints makes a bungle of the conveyor.
	    -- Seemingly fixed in JSW64, but need it done in JSW48 as well.
	    -- 28-1-2006: Can't replicate. What was I talking about? 
	        4-2-2006: Possibly a reference to the fact that if there's
                         no <hints> section the conveyor animation was not
                         being changed?
	  [DONE] * Skylab Landing Bay: Guardians not imported, or rather the 
	   paths are but the sprites aren't. Reason: Skylab sprites are not
           being exported.
	  [DONE] When importing a JSW64 layout into JSW48, ramps are sometimes
           lost. eg: First Landing. 
	  [DONE] Import test64.xml into jsw64v.tap. The ramp in the First 
           Landing has the wrong polarity.
	  [DONE] Triggers don't import correctly. 
	  [DONE] Crumbly floors not exported.

	[DONE] >> Screens.
	[DONE] >> Sprites.
	>> Rooms (JSW48)
		  * Seems to work.
	>> Rooms (JSW128)
		  * Seems to work.
	>> Rooms (JSW64)
		  * Export may not cover all JSW64 features. Let's see...
			00: Guardians - OK
				-- Check initial direction!
			69: Cell types - OK.
			6E: Cell shapes - OK.
			B6: Room name - OK.
			D6: Final Barrier hints / conveyor hints - OK.
			DA: Guardian table - not necessary.
			DC: Solar power start pos - OK.
			DE: Willy's colour - OK.
			DF: Air - OK.
			E1: Item bitmap - OK.
			E9: Exits - OK.
			ED: Willy's sprite - OK.
			EE: Portal - OK.
			F9: Patch vectors.
			FF: Flags - Nokamikaze works; check others
		  * Room import features:
			00: Guardians - Look OK.
			69: Cell types - OK.
			6E: Cell shapes - OK.
			B6: Room name - OK.
			D6: Final Barrier hints / conveyor hints - OK.
			DA: Guardian table - 
			DC: Solar power start pos - OK.
			DE: Willy's colour - OK.
			DF: Air - OK.
			E1: Item bitmap - OK.
			E9: Exits - OK.
			ED: Willy's sprite - OK.
			EE: Portal - OK.
			F9: Patch vectors.
			FF: Flags - Nokamikaze and rigor work.

	>> Rooms (MM)
		* Exporting: Looks OK.
		**TODO** We only exported guardians as downlevel JSW guardians. 
		Ideally we should have a native-format export as well.
		* Importing: Looks OK.
		**TODO** We only exported guardians as downlevel JSW guardians. 
		Ideally we should have a native-format export as well.
	>> Rooms (JSW2)
		* Exporting: Looks OK.
		* Importing:
			Room layout: OK
			Room cells:  OK
			Room title:  OK
			Room exits:  OK
			Guardians:   Mostly OK, but sprite mask conversion on
				the import is somewhat iffy.
				- Import: Downlevel HG and VG work except for
				 the sprites. Downlevel DGNW and DGNE 
				 untested.
			Special-case: OK
			Conveyor animations and other hints: OK
			Items:  OK
			
			
	>> Rooms (Geoff Mode) 
		* Not started
		* Will need an override to guardian export.
	>> Rooms (Henry's Hoard)
		* Not started, but it seems to work nicely enough 
		 with the standard JSW48 schema.

9. Some sort of plugin support.

10. Attributes of Maria, Toilet etc.
	>> Do as a "Misc" page.

11. Patch vector editor?
	[DONE] >> Even a simple hex editor?

[DONE] 12. Support Manic Miner 128.
	>> Can load.
	>> Can see rooms (but 'Specials by room' has been juryrigged)
	>> Can edit sprites.
	>> Can see guards
	>> Can edit screens. 
	>> Can edit title message.
	>> Can turn specials-by-room on or off
	>> Can recompress to save.
	>> Save from main menu doesn't work - save from in game does.

13. Support JSW2 
	>> Can load JSW2 snapshot (unencrypted version only).
	>> Can save JSW2 snapshot
	>> Can draw rooms (less ropes).
	>> Can edit JSW2 Sprites
	>> Can edit JSW2 Cells
	>> Supports JSW2 Patches (vacuously).
	>> Supports JSW2 Messages
	>> Supports JSW2 Lifts
	>> Supports JSW2 Start Position
	...We still need:
	>> Decryption
	>> TAP file support for load & save.
	>> JSW2 Rooms
		+ [DONE] Doesn't draw ropes.
		+ [DONE?] Doesn't get the items flashing in the right colours.
			They look close enough for govt work.
		+ [DONE] Animate conveyors.
		+ [DONE] No clipboard ops.
		+ [DONE] Room options.
			[DONE] :: Cell patterns
			[DONE] :: Name
			[DONE] :: Rope?
			[DONE] :: Conveyor animation
			[DONE] :: Patch vector
		+ Guardian options.
			:: Deleting them doesn't always seem to work properly.
			  It moves later ones up, but doesn't seem to reduce
			  count properly. [Can't replicate?]
			:: When guardian is added, need to go away and come
			  back or its bounds don't get drawn properly (plus
                          other infelicities).
		+ Guardian bounds don't have ends.
		+ [DONE] Guardian editors.
	[DONE] >> JSW2 Teleporters
	>> JSW2 Screens
		[DONE] + New cell-based title screen editor.
		[DONE] + Should apply to JSW2 title screen.
		[DONE] + Should apply to JSW48 title screen.
		+ In both cases, needs options to change the trigger
		 attributes (JSW48 has four 'plain' and four '/' - all
		 others are '\'. JSW2 has 'yellow-on-yellow' and 
	 	 'flashing yellow/magenta').
		[DONE] + In both cases, need options to change the four stripe 
			UDGs.
	[DONE] >> The Cartography Room.

14. Support JSW2 128.

15. Support JSW: Excession (aka "How big can we make a room definition?")
   Excessionary ideas:
	* Save as SLT file.
	* 16k per room, consisting of:

		0xD300:     Sprites
		0xE300:     Guardians
		0xE400:     Tune
		0xE500-end: Screen

   (A Manic Miner: Excession is also an idea; this would fit in 128k, assuming
    4k extra per sheet). 

16: Here's an idea. Killed Until Dead: JSW
	* Make the rooms look like JSW rooms, and rename them:
		- Hall    -> Hall
		- Foyer   -> Attic
		- Library -> Landing
		- Patio   -> Yacht
	* The view from your window should be the Megatree

17: Support EZX and 256 colours

[DONE] 18: Hex editor

19: Rip editor (like unto SPECRIP).

20: Add support for HOME and END keystrokes in edit and list controls.
   (these are 2-byte sequences, CtrlQ followed by Left/Right/PgUp/PgDn)

--- PREVIOUS TODOS ---

For 2.1.0 release:

1. Get some more Manic Miner functionality in there. 
	>> Room viewer
		+ Air remaining?
	>> Room editor
		+ Clipboard etc: 
			* Horizontal mirror doesn't reflect portal.
			* Horizontal mirror moves Willy one cell too far right
			* Horizontal mirror moves portal one cell too far right
			* Vertical mirror untested, but probably scrambles
			 all sorts of things.

[DONE] Get JSW128 using the JSW64 "universal" loader.

[DONE] Get JSWED to read "universal" format tap files.

[DONE] Get a memory map into JSW128 (and JSW64) for these memory pages:
	ED EE EF F0 F1 F2 F3 F4 F5 F6 F7
[DONE] 2. Get some JSW64 functionality into JSW128, and add editors for it.

3. Allow JSWED to create and edit JSW64 games - at least try supporting 
  variant W.
	[DONE] >> Loader doesn't load all files from jsw64w.tap
	[DONE?] >> As part of this, move everything over to the 'Room' object 
	  model. Still need to cover altering room properties.
	[DONE] >> Also as part of this, MM doesn't handle '?' cells properly 
	  yet.
	[DONE] >> Create a JSW64 room drawer.
	[DONE] >> Create a JSW64 room editor.	
		[DONE] + Place '?' cells (Z variant)
		[DONE] + Air supply
		[DONE] + Item bitmap
		or in bytes:

		00-40: Guardians	[DONE]
		       Cell behaviour	[DONE]
		41-B5: Cells		[DONE]
		B6-D5: Room name	[DONE]
		D6-D9: Conveyor anim	[DONE]
		DA-DB: Guardian table   [DONE]
		DC-DD: Solar beam	[DONE]
		DE:    Flags		[DONE]
		DF-E0: Air		[DONE]
		E1-E8: Item bitmap	[DONE]
		E9-EC: Exits		[DONE]
		ED:    Willy's sprite	[DONE]
		EE-EF: Portal bitmap	[DONE]
		F0-F3: Portal position  [DONE]
		F4:    Portal attribute [DONE]
		F5-F8: Portal destination [DONE]
		F9-FE: Patch vectors
		FF:    Flags2		[DONE]

		[DONE] * Add editor for sprites at 8200 and 8300 (depending 
		 on the variant).

	[DONE?] >> Create a JSW64 'room memory' editor.
		[DONE] Allows guardian table to be moved around.
		[DONE] >> Stop sprites being put on top of guardian tables.
	[DONE] >> Create a JSW64 portal/teleport editor.
	>> Create a JSW64 guardian editor.
		-- Screen exists, but only goes up to 32 guardians.
		-- Guardian table editor needs a legend.
	[DONE] >> Create a JSW64 messages-page editor.
	[DONE] >> The code to get the variant doesn't work on snapshots, because
	  the variant ID is stored in a byte that is overwritten. Either use
	  a different byte or write a different test.
	[DONE] >> Write a JSW48 -> JSW64 upgrade.

	[DONE] >> Air bar attribute editor

	[DONE] >> Documentation: Superjump and trampolines do *not* mix!

[DONE] 4. Check compilation under Mandrake 9.2.

[DONE] 5. Add support for safe start position (IMCJSW).

[DONE] Bug: Upgrade to JSW64 can crash, particularly with Softricks games (try
 with JSEMILY).

[DONE] 6. JSW64 upgrade: Triggers. These are guardian entries that change the 
  subsequent guardian entry when a flag byte goes to 0. A Eugenic is a 
  one-shot change.
  First byte is 88h. Others somehow have to decompress over existing 
  guardian. 
	(The JSW64 engines now support these. JSWED can upgrade the engine,
	and can edit a trigger (sort-of) but can't add a new one).

	Trigger format:
		DB	88	-- Type
		DW	flag	-- Address of the flag byte, which must go 
				  to zero to trigger the change.
		DB	newtyp	-- New byte 0 of target guardian.
		DS	4	-- New bytes 4-7 of target guardian.

[DONE] 6a. Add editors for skylabs, Eugenes, switches, vanishing walls.
	* We have:
		Skylabs: OK
		Eugenes: OK
		Switches: OK
		Triggers: OK 
		Vanishers: OK

[DONE] 6b. Write optional extra guardian modules that can be hooked in at will, for:
   * Kong (maybe Kong should be left as a patch vector)
   * Lifts. The lift check is done while drawing:
	> Draw lift. If it collides with something:
		>> If Willy's Y is >= (lift Y - 15), set it to 
		   (lift Y - 16). If this is <0, go up.

[DONE] 6c. Write yet another room options form, to say where the room gets its
   graphics from.

6d. Backport the JSW64 "funky guardians" code to JSW128. Enable editing of
   all new types, noting that there's no rigor support in JSW128, so no 
   "items taken" trigger.
	[Not really feasible, because of the different internal organization
	of JSW128 as opposed to JSW64. Also guardians are global, not reset
	when you enter a room]

[DONE] 6e. Add a "blocker" type. All guardians after the blocker don't appear; 
  but a trigger can be used to unblock it...

6f. Add a true "patch vector" type guardian type.
	0x8F [move vector] [draw vector] xx yy zz
	[No space left in JSW64 engine].

[DONE] 6g. Do a "JSW64 for machine code programmers" section.


