--------------------------- SLADE - stuff.txt ---------------------------
              Big list of unimplemented features, requests,
            TODOs, ideas, and other general development notes
-------------------------------------------------------------------------


TODO List ---------------------------------------------------------------

--- Bugs ---


--- Minor Problems/Annoyances ---
- Long calltips can extend off the edge of the screen
- Incorrect ctrl+tab behaviour with tabs
- Esc to close find+replace window


--- Map Editor 3.1 ---
- Checks:
	- Invalid sector references
		- Add 'rebuild sector' fix option
- Better UDMF property handling, proper support for unknown properties read with the map
- Tag edit mode for TIDs/LineIDs(?)


--- Other 3.1 ---
- Look into using wxWebView to show documentation in a tab


--- Map Editor post-3.1 ---
- 3d mode
	- Offsets/scaling copy+paste
	- (Z)MAPINFO parsing for sky texture
	- Auto-align Y
	- Better vis checking
	- 3d floors preview
	- Portals preview
	- Aspect ratio correction
- Script editor
	- Compiler output pane
	- Error pane rather than just displaying error output
	- Ability to edit/compile library scripts
	- Other script types (DIALOGUE etc)
- Find & Replace
	- Thing types
	- Action specials
	- Textures
- Map format conversion


--- Features for 3.1.1 ---
- Resource editor:
	- Edit entries externally
- Map editor:
	- Offsets/scaling copy+paste
	- (Z)MAPINFO parsing for sky texture


--- Editor Features ---
- ANSI screen editor
- Proper font viewer
- 'Cleanup' stuff (unused patches, textures, flats, unneeded entries...)
- Compilation of other language scripts
- Archive merging
- Archive conversion
- 'Export As' for archives (or just ability to select a different type/extension on save as)
- 'Export As' for entries - does conversion+export

--- Formats ---
- 7z
- Lzma/bz2 for zip
- View any entry as raw gfx

--- Text Editor ---
- 'Tabs as Spaces' option

--- Texture Editor ---
- Make 'grid' size optional
- Snap to grid for dragging patches

--- Gfx Editor ---

--- Audio ---

--- General ---
- Preferences Dialog:
	- List of entry types, ability to enable/disable detection of certain types
- Finish entry data format (EDF_*) system:
	- Simple user-definable data formats:
		- Minimum/maximum size
		- Byte pattern to look for at a certain offset in the file (ideally allow multiple of these), something like:
		  pattern = 10, 255, 255, 255, 0; = look for 255,255,255,0 at offset 10 in file
		- Call inbuilt tests for more complex detection algorithms (wad files, doom gfx, etc)
		- Convert inbuilt tests to lua? (might be slow, but would allow for all entry types to be user-defined)
- General optimisation:
	- Entry type detection (maybe move the initial detection to a background thread)
	- Gfx conversion
- *Resources system:
	- opened archives are either used as resources or not
	- when searching for patches etc, resource archives are searched, then base resource archive
	- archive list on archive manager panel could have 'resource' checkboxes for each list item
- Different icon sets
- Better backup system
- More drag-and-drop support
- Rewrite VirtualListView with item filtering/sorting in mind
- Need to do something with folder order - either always order alphabetically, or allow reordering


--- Internal / Dev ---
- SFont class
- Ability to set an archive never to read entry data into memory (read data from the file every time)
- MemChunk subclass that deals with a file rather than a memory block
- Some lump (sub)formats can only be identified properly from the presence of other lumps; e.g. GL nodes and THINGS/LINEDEFS
- Needs some kind of proper archive type system, handled by ArchiveManager (similar to SIFormat)
- Need to do something about keeping ArchiveEntry.data.size and ArchiveEntry.size in sync
  (Still need the size member for entries that don't have their data loaded into memory yet)
  (could make ArchiveEntry a subclass of MemChunk?)
- Better way to get the currently selected entries would be nice
- Should probably write my own lexer for TextEditor since the default cpp/cppnocase ones are somewhat limited
- Multithreaded entry type detection?


Unimplemented Feature Requests ------------------------------------------

--- General / User Interface ---
- Fully customisable toolbars
- Sorting by column (I.E. Name or Type)

--- Archive / Entry Management ---
- mass export to format (XWE)
- sorting lumps in archive (not just their display)

--- Entry Editing ---
- SBARINFO viewer/editor -- SBARINFO is getting deprecated, so maybe not

--- Gfx ---
- Save offset type between sessions
Translation dialog:
- Source/destination palette selectable
- Scroll through multiple preview gfx
- Zoom on preview gfx (perhaps in pop-up window?)
- Allow use with truecolour gfx
- Tool for trimming blank space around a graphic.
- Tool for adding blank space to either side as needed to put the x offset right in the center -- done as CCMD

Conversion dialog:
- Enter and esc mapped to convert all and skip all

--- Text Editor ---

--- TEXTUREx Editor ---
- list textures and patches in alphabetical order (with non-iwad ones at the bottom of the list)
- find/replace for patches
- Ability to search for a texture containing a specific patch

--- General ---
- Support for LZMA, Bzip2 and zip formats other than store and deflate



Ideas / Possible Features -----------------------------------------------

- Tree view for entry list (optional)
- Ability to perform all archive/entry management functions via the console (possibly allow scripts too?)
- 'Animation viewer' (select a bunch of sprites to test an animation or whatever)
- Hex editor
- Font editor
- Better UI for palette editing tools (something like the color remap maybe?)
- UI for creating custom colormaps (with other settings than dcolors.c's)
- Merge "Tint" and "Colourize" into a versatile image recolour feature with RGB, HSL, and Lab tweak options as well.
- *Project system:
	- Hide/abstract underlying archive/entry stuff
	- Will need to specify a 'game' for the project to enable/disable certain features:
		- Changes the way certain things are handled (ie vanilla will have separate textures/flats where zdoom will have just textures)
		- Limits resource formats to what is supported (PNG in zdoom but not vanilla)
	- Work with 'resources' rather than entries
	- Resources imported from archives
	- Resource types:
		- Graphics:
			- Textures
			- Flats (for games that don't support mixing of flats/textures only)
			- Sprites
		- Maps
		- Audio:
			- Sounds
			- Music
		- etc...
		- Data (anything that doesn't fit into the above categories)
	- Resources can either be internal or external:
		- Internal means the resource is imported into the project and exported with it
		- External means the resource exists in an external archive and will not be exported with the project
		  (for resources in an IWAD, texture pack, etc)
	- Ability to export project to archive(s):
		- Can export all resources to a single archive
		- Can 'split' resources to separate archives (ie one for textures, another for maps, etc)
	- A system of cascading configurations will be needed to handle all the game/port/format combinations
- Archive/Entry information database:
	- Store within the archive or in a separate file (optional)
	- Menu item 'Archive->Write Metadata'
	- Keeps information about archive entries:
		- CRC (will be used to determine if the info is up-to-date)
		- Extra properties
		- Entry type
- Model and voxel viewer
- The 'findModifiedEntries()' function could be used to create an 'Export Changes in New File' feature as an alternative to saving the archive, useful especially for IWADs.
- EntryPanels able to handle multiple entries for special purposes
	- GfxEntryPanel: shows all selected images in a browser kind of thing
	- AudioEntryPanel: loads all selected entries as a playlist
- Full DECORATE editor (would go nicely with the project system above)
- DeHackEd editor (could be an outgrowth of the DECORATE editor since it'd require actor/state management)
- Feature to dump map information (number of vertices (+ nodebuilder vertices), of linedefs, of sidedefs, of sectors, of segs, of things)
	- Report on flats and textures used (which ones, and how many times)
	- Report on thing placement (using game configuration to name and categorize things)
	- Report specials used in map (both linedefs and, if appropriate, things, using game config to name and categorize specials)
	- Ideally would allow to output in a wiki syntax to help make the tables used in the Doom Wiki.
- Waiting For SladeScript(tm), in three remaining steps:
	- Console commands to perform archive management actions (opening or creating archives, saving, importing files, exporting entries, copying, etc.)
	- Console command aliases (like in ZDoom)
	- Script mode: command-line options to (1) run a console command batch at startup and optionally also (2) quit once the batch is finished.
		- Bonus fourth step: interpret DeuTex scripts, allowing SLADE to replace that outdated tool in projects like Hacx and Freedoom.


Other / Notes -----------------------------------------------------------
 http://tfc.duke.free.fr/old/models/md2.htm -- reference code for a simple OpenGL MD2 viewer
 
