Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
JadingTsunami

On the evils of ML_DONTDRAW

Recommended Posts

ML_DONTDRAW, in theory, is necessary to hide monster teleport closets, sound tunnels, and messy lines that don't add navigational value to the automap.

 

It has an evil side in that many use it to hide secrets so they are harder to find. This also has the side effect of making the automap powerup even weaker, because it can't help you find secrets you would have otherwise missed.

 

I'm playing with enabling all lines with the automap powerup (similar to the iddt cheat), and highlighting undiscovered secrets in gold, making the powerup potentially more valuable. So far, I like it, but it has the obvious downside of cluttering the automap with junk. And I suspect more than a few level authors would cringe at the idea.

 

My thought to meet halfway would be to only allow ML_DONTDRAW on unconnected sectors, but I wondered if there are better ideas out there. I thought of using the REJECT lump as a hack, but it seems not all WADs bother with this lump.

 

What are your thoughts?

Share this post


Link to post

I have used it extensively to clean up the map so that the map does not show extraneous implementation details.  If I had to split a sector into sections due to lighting or for some mechanism, then there is no reason for the map  to show that.

Extra lines, extra sector divisions, non-visible trigger lines, lighting sub-sectors, and the like are hidden from the map.

I also use it to hide some areas of the level map where I consider that those areas would not be on a map found by the player.  These would be freshly dug tunnels, or monster alterations that conceptually occurred after the map was created.

Some authors just use it to make things difficult, but I use it to control the map presented to the player.

The usage of ML_DONTDRAW is part of the crafting by the author, and is part of the user presentation of the levelmap.

By tampering with the display of ML_DONTDRAW, you would interfere with that.  No simple rules to distinguish the various uses of that flag.

Share this post


Link to post
Posted (edited)

Yeah gonna have to agree with the whole "hiding extraneous details" thing. I imagine you could find a whole ton of maps that would look incomprehensible on the automap without hiding extraneous linedefs, and a whole ton of maps that really should have done that and as a result are extremely difficult to navigate with the automap.

 

Also there's tons of cool effects people can do that would be totally lost. See Grove. (I know some people didn't like it but I thought it was a great effect)

Share this post


Link to post

Idea: see how it looks if you only draw on the map the walls and the obstructive details -- only the lines which can block movement, not the simple steps or decorative ceiling detail. 

Share this post


Link to post

Thanks for the replies.

 

I'm trying out an approach that seems to create a happy medium.

 

1. For each secret sector, ignore any ML_DONTDRAW lines if the player has the allmap.

2. Flood fill check connected sectors for ML_DONTDRAW lines and ignore those too.

3. If a sector is reached with no ML_DONTDRAW lines, stop.

 

This is done once at the start of the map. As I have it now the code removes the ML_DONTDRAW flag, which is poor practice but is working in a test run.

 

There are certainly ways to fool this algorithm, but it seems to suffice in most cases.

 

If it is workable in more test runs I'll add in the allmap portion as part of the pre-processing.

Share this post


Link to post
Posted (edited)

I swear, I believe that it's just something you have to live with, along with providing a cheat for those that abuse the feature. ML_DONTDRAW is meant as just that: "Don't draw the line".

 

What you're contemplating is well intentioned, but it creates a "works in this port, but not that port situation." Respecting and rendering the author's intentions is the best course (even if their intentions are lame).

 

At least, make it a toggleable option, so the player knows they are playing the map with modified rules.

Edited by kb1

Share this post


Link to post

ML_DONTDRAW has its purpose, mainly to keep extraneous information off the automap. It only becomes a problem if a certain sort of control-freakish mappers uses it for purposes like hiding the entire automap, but that's where the known cheats come in. (And if I encounter mods that do this they are normally moved to the dumpster right away without wasting a second thought about it. In general, people who think this is necessary are not capable of making well-playing maps.)

 

Share this post


Link to post

@Graf Zahl: Yep. Hiding the automap is just not Doom :)

 

@JadingTsunami: That's a pretty fancy, and complex algorithm you've got there! Do you limit it to 1-sided lines, or do you also unhide 2-sided lines? I would guess that you might want to leave the 2-sided lines alone. I'm thinking that in most situations, a hidden 2-sided line is hidden for a good reason (unless the map is awful, and the author used 2-sided lines everywhere - ugh).

Share this post


Link to post
19 hours ago, kb1 said:

@JadingTsunami: That's a pretty fancy, and complex algorithm you've got there! Do you limit it to 1-sided lines, or do you also unhide 2-sided lines? I would guess that you might want to leave the 2-sided lines alone. I'm thinking that in most situations, a hidden 2-sided line is hidden for a good reason (unless the map is awful, and the author used 2-sided lines everywhere - ugh).

 

The goal is to unhide secrets when the player has the allmap powerup, so as long as the containing or adjacent sector is marked "secret" and the line is tagged with ML_DONTDRAW the line would get unhidden.

 

Fortunately most secret sectors are bordered by a door or room with non-hidden linedefs which makes the algorithm work OK in most situations.

 

I'm still tweaking and playtesting it to see if it's a worthwhile option or not.

Share this post


Link to post

wouldn't it be easier to simply mark secret walls with a different color? it will clearly show secret entrances, and then the player is free to explore those places. one line of code, no complex algos, no corner cases to avoid, everyone is happy. ;-)

Share this post


Link to post
5 hours ago, ketmar said:

wouldn't it be easier to simply mark secret walls with a different color? it will clearly show secret entrances, and then the player is free to explore those places. one line of code, no complex algos, no corner cases to avoid, everyone is happy. ;-)

 

When you say secret walls -- if you mean "linedefs of a sector marked 'secret'", then yes, I tried that, where that fails is many authors will mark a single small sector somewhere inside the secret area as the official "secret".

 

So you end up with a tiny floating highlighted square off the edge of the map and no clue how to reach it.

 

It's better than nothing, but ideally I wanted the allmap to give a reasonable idea of how to reach the secret areas. Hence why I put more effort into the method.

Share this post


Link to post
8 hours ago, JadingTsunami said:

So you end up with a tiny floating highlighted square off the edge of the map and no clue how to reach it.

i see.

Share this post


Link to post
16 hours ago, JadingTsunami said:

 

When you say secret walls -- if you mean "linedefs of a sector marked 'secret'", then yes, I tried that, where that fails is many authors will mark a single small sector somewhere inside the secret area as the official "secret".

 

So you end up with a tiny floating highlighted square off the edge of the map and no clue how to reach it.

 

It's better than nothing, but ideally I wanted the allmap to give a reasonable idea of how to reach the secret areas. Hence why I put more effort into the method.

I'm with you. It sucks that people abuse the DONTDRAW flag. I must admit, complex algorithms as such worry me a bit: There are probably 200,000 maps out there that this algorithm will parse, some made with some insanely bizarre tricks, some are flat out broken... but Doom just chugs through most of them just fine.

 

I suppose the worst things that could happen are:

  1. The algorithm locks up into some infinite loop or something, on some weird trick with the geometry. That's just my imagination, but I'll throw it out there anyway.
  2. Some lines get shown which probably shouldn't. No real big deal.
  3. Some lines don't get shown which should. Still no real big deal.

As long as you prevent #1, this could be an interesting feature. But, you can't really fix stupid. Crappy maps are crappy maps.

Share this post


Link to post

Just tossing this out there, I feel like the automap powerup would be a lot more effective if it worked exactly as it does currently, but it shows all the actors and the direction they're facing like the IDDT cheat does. This way you could be clued in as to where certain enemies or powerups may be hidden without having to reveal a bunch of ugliness that's been deliberately hidden by the author. Maybe even have a different color for players, enemies, powerups, and other random stuff, as opposed to them all being green triangles. Just an idea.

Share this post


Link to post

Strife has such a powerup, but to avoid making it too powerful it is timed and expires after 30 seconds or so.

 

Regarding ML_DONTDRAW abuse, I think the best that can be done is what I added in ZDoom when it bugged me too much in Legacy of Suffering: Add a cheat that renders the flag ineffective if being used on a given percentage of the walls in the map. The textured automap in ZDoom based ports will also often show some areas that aren't intended to be seen.

 

Share this post


Link to post

I totally disagree with combating designers' options on what constitutes super-secret areas, but that's why we have ports to choose from.

Share this post


Link to post

In the end IDDT still exists, so all these shenanigans are mostly pointless.

 

Share this post


Link to post
15 hours ago, printz said:

I totally disagree with combating designers' options on what constitutes super-secret areas, but that's why we have ports to choose from.

I agree, with the additional clause that I have the ability to totally bypass the designer's options when deemed necessary to continue enjoying their creation :)

Share this post


Link to post

Normally, the automap key toggles the automap on and off. What if in a hypothetical source port the automap powerup adds a third automap setting you can cycle through? Full map including the lines that are flagged invisible.

Share this post


Link to post
50 minutes ago, VGA said:

Normally, the automap key toggles the automap on and off. What if in a hypothetical source port the automap powerup adds a third automap setting you can cycle through? Full map including the lines that are flagged invisible.

Well, the IDDT cheat usually functions as you describe, cycling through the various capabilities each time you type it. So, yes, it's easy to add to IDDT, or as a new, separate cheat, or as a new mode when using Tab. Personally, I want my Tab key to remain strictly as an on/off toggle. Many source port have a console that allows the user to bind a keystroke to a complex console command, which could be another way to add such functionality in a customizable way.

 

I'm big on having the port fix *minor* problems in an otherwise nicely-built map. But, to me, misuse of the "DONTDRAW" flag suggest a poorly-built map, and there's far too many good maps out there to jump through hoops fixing maps that employ player abuse! To me, an "all-or-nothing" cheat is sufficient retaliation, but I applaud the OP's efforts.

 

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×