Eureka TODO / WISH-LIST
- ability to change what mouse buttons do
- ability to change mouse move/turn speed in 3D view
+ Restore last window position and maximized state
+ grid : scroll speed preferences
+ Hexen support
+ BOOM Generalized line types / sectors
+ a tutorial for the basics
+ information on each binding command, parameters etc..
+ grid drawing too slow when small step and zoomed out
(since we render a huge number of dots)
--> create an in-memory image (e.g. 64x64) of the dotty grid
and blast it repeatedly to the window
+ problem with mid-masked textures (secret in E1M1, cage in E1M9)
+ a "Recently used" category (sorted by time)
- remember values in .dat cache
+ ability to build nodes only in modified maps
+ SHIFT + move mouse = keep current highlight
? ENTER key pops up an "operation" menu, which provides all the
commands that can be done via the keyboard (e.g. flip linedefs)
+ File / Test Map
+ make filenames absolute
+ configurable stuff:
- directory to 'cd' into
- program to invoke
- arguments to use (-iwad, -file, -merge, -warp)
- support resource wads
- make sure the user built the nodes
(ideally invoke it automatically)
+ check that current pwad has been externally modified
+ Preferences window:
+ add backup_max_files / backup_max_space
- implement the scrolling sizes
- add more stuff (see USER CONFIG NEEDED, below)
+ un-hard-code menu shortcuts? (how ??)
+ a dialog to view / load / prune backups.
IDEA: ability to edit Lua code for OBLIGE prefabs
WISH: support Windows 95/98/ME
[running on Windows 98SE requires KernelEx]
WISH: support UDMF format
- ability to hide the right-side panel
- File / Delete Map
- File / Rename Map
- Scripting language
- vertex/linedef mode: '[' and ']' to adjust length of current line
- binding functions for all menu stuff (NewMap, OpenMap, etc....)
(perhaps prefix with MENU_xxx)
- improve Key binding preferences:
+ "Grab" button in UI_EditKey
- "Find" or "Match" button for function in UI_EditKey
- reverse ordering of KCTX_XXX values
? config system: OPT_KEY values
- make sure Load/Export wad filename not already in master_dir
- PRINT key to make a screenshot of map or 3D view
- in EUREKA lump, if a path is under $HOME store it as "~/blah..."
and expand that syntax on load.
NO: ability to use an external node builder
? an auto-save feature (e.g. save every N minutes unless no
changes occurred in the last N minutes).
really needs the backup view/load/prune dialog too.
? a way to slow down fake mouse wheels?
? nicer way to select map, render a small 2D version of each map
and present them in a scrolling list.
(c) handle the -psnXXX argument (see SDL_main.m)
NOTE: probably needs integrating some of SDL's logic
NO: if a given pwad (from command line) does not exist, ask to create it
perhaps: --create or --new option?
IDEA: a dialog to specify directories to find wads.
Initially populate it with the currently hard-coded places
and $DOOMWADDIR and $DOOMWADPATH. Perhaps add places where
the user opened a wad automatically (or ask?).
IDEA: after inserting a new object, allow moving another object
(i.e. set edit.did_a_move = true). Perhaps config item.
WISH: support DDF as (or in) a resource file
WISH: support DECORATE as (or in) a resource file
+ add supported OSes -- e.g. Windows >= 2000
- make a manpage for the debian package, list cmdline options
- document texture browser (RIGHT click etc)
NO: built-in cheat sheet for mouse buttons and common keys
? command line arguments page
NO: config file syntax
- rename code files:
selectn.cc/h --> x_select.cc/h
objects.cc/h --> x_object.cc/h
editloop.cc/h --> m_editor.cc/h
- have XXX_NotifyNewMap() functions
- replace usage(s) of fl_input
- VM: use exceptions instead of setjmp/longjmp
- move 'k' split linedef to SPACE/INSERT, put vertex where mouse is
+ a menu for inserting shapes, especially N-sided polygon
+ support PNG (etc?) image formats [enabled by a port definition]
--> feature png
- support TX_START / TX_END namespace for textures
--> feature tx_start
+ when dragging a shape next to existing geometry, highlight
vertices and linedefs which would get merged, and implement
!! handle self-referencing linedefs in auto create/split sector
+ for the "Edit -> Paste" menu, turn the cursor into crosshairs
and wait until the user selects a spot to paste to.
+ View / Find
(use GoToObject for first match, FindNext starts at selected + 1)
- VERTEX mode : useful ??
- THING mode : match on type (possibly on flags, TID for hexen)
- SECTOR mode: match on type / desc / tag / flat
- LINEDEF mode: match on type / desc / tag / texture
- assume texture names beginning with '#' are special
- View / Toggle skill mode
? when highlighting a sector, draw the things in the same color as
the sector is highlighted, but not as bright. Because many sector
functions will affect things too -- make it obvious to the user.
- disallow insert of new linedef if it would overlap or cross
an existing linedef (or touch an existing vertex).
[overridden when SHIFT is pressed, but no auto sectoring then]
THIS --> if new linedef would cross an existing one, then just
create a new vertex at the intersection point.
AND: similarly if a new linedef passes through an
existing vertex -- create two instead.
__IDEA__ the 'c' key in linedef mode to fix crossing / overlaps
- quantization function: prevent linedefs from overlapping / crossing
- Multi-select : if CTRL is pressed, don't clear selection after drag
- exchange object numbers
- some port-specific line/thing flags
? disconnect sectors : include islands (perhaps with 'D')
? when moving a sector and the camera is inside it, move camera too
? fix PointOutsideOfMap() code to handle places where the point
cannot "see" the surrounding void space.
TraceLineLoop on the linedef to the right, if faces_outward
then test upto 32 lines (OppositeLineDef) to see if any can
see the void.
if geometry is broken : special result.
?? when one vertex of a linedef is moved (and not the other)
update the X offset on the appropriate side (right side for start,
left side for end vertex).
? SHIFT + SPACE = no auto create/split sectors
IDEA: for quantizing a group of objects, try about 9 delta
positions (x+0, x+step/4, x-step/4 etc...) and choose the
NO: merge vertex and linedef modes
- option to reverse mouse movement
+ smooth movement via keyboard
- call a function in Main_Loop
- if did a move, Fl::wait(0) instead of 0.2
- handle key up/down events in UI_Canvas::handle()
- handle very tall/thin window : letter box with black
- closed sectors have a see-through gap (gets bigger further away)
+ being able to select stuff to modify:
- sidedef uppers and lowers
- moving up/down with RMB should not disable gravity when change
- able to drag things around
- raise floors?
- move vertices?
+ shift textures?
- View/Place Camera command, cursor turns into +
- rotated sprites
+ an info bar: X Y Z ANG GRAVITY TEX/LIT/OBJ
NO: ability to drag the camera (on 2D viewport)
IDEA: a key (or mouse button) to toggle "grab mouse" mode
IDEA: animation mode, render continuously and show any lighting
effects and animated / scrolling textures and sprites
- a "Used in map" category (sorted by usage)
+ when opened by a click, jump to the texture/thing/etc clicked on
- can change the [max] size of the texture/flat previews
- scroll speed (i.e. linesize) is configurable
- no-pic mode for textures and flats
- search box: ',' for AND, '/' for OR
Game / Port Definitions
- game-def setting: view_height
+ ability to "remove line 271" (etc)
+ finish HacX support -- categorize the textures
+ support Harmony
- support Chex Quest 1 and 2
- FreeDOOM: categorize the new textures
- a new category for BOOM's "property transfer" linetypes
MISCELLANEOUS / IDEAS
toggle on/off with the F4 key
exists where map/render is (maybe half, above it)
(maybe translucent background)
turns off browser (and vice versa)
have cvars for config items, changeable in console
quake-like binding, e.g. "bind w swap-flats"
arguments beginning with '+' get executed as console commands
(a) there is always an IWAD (given by -iwad or found somewhere).
maps are never saved into an IWAD (special command line option to do it)
---> global: 'base_wad'
(b) there is _usually_ a PWAD (given by -file).
it must be modifiable (e.g. not in /usr), CTRL-S saves into it.
when absent, user cannot File/Save, the File/Export function
is done instead.
---> global: 'edit_wad'
(c) when File/Export is successful, that becomes the new PWAD.
the existing PWAD goes away (or becomes a resource wad).
(c) user can File/Load another map, but if it's in an uneditable
wad (especially the IWAD) then the previous PWAD goes away
(or becomes a resource wad).
(d) File/New Map needs to ask for a map name.
If there is current PWAD and map already exists, warn user
Remove the path and extension from the IWAD, and make the result
lowercase, and that is the name of the "game". There must be a
config file called 'games/xxx.ugh' which defines everything for
SECTOR INSERT FUNCTIONS
(a) in an area without any sector, add a NEW sector there
(ideally copying values from a nearby sector)
[there cannot be a highlight]
[if a single sector is selected, copy values from it]
[if multiple selected sector -- ignore? beep? copy first?]
AFTER: this sector becomes selected
(b) in an area with sectoring (broken or not), add a NEW sector
---> CTRL + SPACE [the CTRL forces a NEW sector to be made]
[if a single sector is selected, copy values from it -- overrides highlight]
[else if a sector is highlighted, copy that]
[else use logic from (a)]
AFTER: this sector becomes selected
(c) in an area with broken sectoring, fix the sectoring using the
currently highlighted one.
The presence of a highlighted sector is what differentiates
case (c) from case (a).
[if sectors are selected -- ignore? beep?]
this sector DOES NOT get selected [because it is NOT NEW]
(d) copy properties from an existing sector (selected) to
the highlighted one. Beep if invalid selection.
--> 'c' copy command
Hmmm, does it make more sense to select the TARGETs and
copy from the Highlight ??? ---- CONFIG ITEM!
(e) in any area, change sector to an existing one [selected]
(i.e. grow that existing sector)
---> 'm' merge command
Basically use an angular occlusion buffer. Process each linedef
in the level and update the angle range in the buffer. When
finished, any gaps in the buffer means that the point can "see"
The selection contains the vertices to move (require vertex mode).
Process each vertex in turn, if quantization works then unselect that
vertex, otherwise keep it selected. After all processed, BEEP if any
vertices remain selected.
Have a selection_c variable for ones already processed, and ones
which moved successfully.
A vertex that is already on the grid trivially succeeds.
Otherwise try the FOUR nearby corners (TWO when the vertex is
sitting on a grid line), checking nearest first.
THE NEW POSITION MUST BE VACANT for the move to succeed.
Also must prevent linedefs from crossing or overlapping.
There may be a need for additional logic to keep the original
orientation of linedefs (horizontal lines stay horizontal,
vertical lines stay vertical, diagonal lines stay diagonal).
However this is difficult to do in practice : perhaps do it by
checking all lines in an initial pass, and mark vertices which
are not allowed to "round up" to a nearby grid spot (vertices on a
horizontal line are not allowed to round up vertically, and vice
USER CONFIG NEEDED