sirjuddington / SLADE

It's a Doom editor
https://slade.mancubus.net
GNU General Public License v2.0
710 stars 110 forks source link

Map visualizations #382

Open eevee opened 8 years ago

eevee commented 8 years ago

Rebooting #320, since that started out focusing on a single idea.

There are a lot of ways to think about a map, and currently SLADE only shows a couple: light levels, floors, ceilings. I keep thinking of more I'd like to see. The tricky bit is the UI — it's easy to just add a dozen modes, but would be much nicer if a lot of information could be fit sensibly in just a couple.

Here are some obvious groupings that can probably be reduced. I think @jmickle66666666 had some thoughts on this too.

Automap

Dim "not on map" lines, and draw "secret" lines as if they were one-sided. Not sure how to indicate "starts on map". Also not sure what happens if a line has multiple automap flag.

This could possibly be combined with the default view, which could reduce the visual clutter of control sectors and other non-essential lines.

Could also draw locked specials in the appropriate lock color, which we can get straight from LOCKDEFS.

Specials and tags

Draw triggerable lines differently from map setup specials (like Line_Horizon or Plane_Align). Maybe a good idea for the default view anyway.

Draw line ids, sector tags, and tids on top of their respective areas depending on mode, just like when multiple objects are selected. Should be able to handle multiple tags (#328).

Indicate sectors that actually move (versus just being involved in teleports, map setup, etc).

Do something-or-other to indicate important thing flags, like skill level and sp/mp.

Monster behavior

Indicate line-of-sight for monsters.

Highlight lines that block monster movement or monster sight. Also highlight specials that can be activated by monsters.

Shade sound zones in different colors. Only need four, maximum, thanks to the four-color theorem.

Perhaps do something special for doors, which block sound by default but allow it through when open.

Contrast

320 was originally about a topographic mode, which would show you the relative height differences among areas of your map.

There's already effectively a light mode (just turn off flat rendering), though it could perhaps evolve into its own mode that emulated lighting specials.

Map flow

This is really difficult, and there are some rough thoughts in #320. I'd just like some way to visualize how a player moves through the map.

I took another stab at MAP02:

Example visualization of Doom 2's MAP02

I think this does a decent job of showing where you can go and how the progression probably works, by aggressively pruning everything not relevant to that. The special colors could use a little more distinguishing, and it would be really helpful to indicate which way you can walk over a sheer drop. Doors and lifts could use some work too. But this isn't too bad considering all I did was some floodfilling and drawing a couple dots.

Gaerzi commented 8 years ago

Automap mode is something that would be reasonably simple to implement and that I want to see eventually. Also textured automap mode (which would obey the relevant UDMF sector flag).

The rest is more complicated as it'll require SLADE to be aware of a lot more data. For example, determining if a linedef can be crossed both ways demands at a minimum to know about max step height (24 by default, but can be changed) and height, but even then, with just that, it'll fail to provide accurate results -- to really work, it needs to also know about player radius, player acceleration, max player speed, and the Doom implementation of gravity. I say that because I see you've colored a linedef orange and another gray on the zone where you have to run across a lower area to get on the elevated part of the red key building. Truth is that both lines should be the same color... You can run from the inside of the building to the outside ramp. And you can't go from the lower-level trench to either the inside of the building or the ramp (at least, not by crossing either of those two linedefs).

eevee commented 8 years ago

Yeah, vanilla "jumping" was one of the major problems I thought about when brainstorming this in #320. I don't think there's even any sensible way to indicate that that jump is possible. Plaster arrows all over the place? Yikes.

I don't think it's too bad if it's limited to just steppable, jumpable, and cliff, though. The default step/jump heights would get you 90% of the way there, and if we wanted to be very clever, it's just a matter of parsing MAPINFO and looking at a couple DECORATE properties. Granted, changes to gravity won't be taken into account, but I think that's to be expected :)

jmickle66666666 commented 8 years ago

Small note: the four color theorem won't work for sectors as they can be non-contiguous (and sound travels through joint sectors)

The sound propagation mode in GZDB just highlights the sound lines, and when you mouse-over a sector, it highlights every connected sector before any sound lines in green, and then any connected sector between 1 and 2 sound lines in yellow. If you make a noise in a green sector, you can hear it in a green an yellow sector. The rest are all gray.