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

What is complevel?

Recommended Posts

I see on speedrun demos and things like that where people talk about Complevels, but i have no idea what that means can someone tell me what that is?

Share this post


Link to post

It stands for compatibility level and it is a feature of the prboom+ engine. Basically, there are different compatibility levels for the engine so that maps can be played under original Doom conditions (known here as Vanilla Doom), Boom, MBF, etc (all of which were future modifications of the Doom source code).

Share this post


Link to post

Complevels are compatibility levels. Since source ports don't behave exactly just like vanilla Doom unless specifically putting some effort into it (e.g. emulating memory overflows, limits, replicating particular bugs), complevel is a parameter which tells the source port how "compatible" with the original Doom it shoul d act, and also with what specific version of Doom. E.g. complevel=2 would be compatibility with the 1.9 executable.

More info on that here: http://doom.wikia.com/wiki/PrBoom since the -complevel parameter only really applies to this particular source port and its derivatives.

Share this post


Link to post
Hock said:

But how do you know the difference between comlevel 2-11?


Check that prboom link I posted a few notches above. It's just an arbitrary number, which just means something because the creators of prBoom decided so. However for Doom you usually need only 0-4 for Doom stuff, and usually 2 will do the trick nicely (v1.9 "compliance"). There are other possibilities, but they are relatively obscure.

Of course, it depends on what you want to do. If you REALLY want to play back or record DOSDOOM demos...

Share this post


Link to post

So what is the out-of-the-box complevel? The last (17 according to the article)?

The default configuration file lists it as -1.

Share this post


Link to post
Maes said:

Of course, it depends on what you want to do. If you REALLY want to play back or record DOSDOOM demos...

DOSDOOM != vanilla and only a handful of publicly-released demos out of thousands need a complevel on playback.

@Hock: is there something wrong with the Using Prboom-plus and -complevels (with recommendations) sticky in the demos forum that you had to ask this here?

@EarthQuake: yes, -complevel 17 is the default. Doesn't make much sense but there are a lot of such legacy defaults carried over from prBoom that entryway has been too lazy to fix.

Share this post


Link to post
Never_Again said:

DOSDOOM != vanilla and only a handful of publicly-released demos out of thousands need a complevel on playback.


I know. I didn't exactly paint it in a mainstream light, did I? Of course DOSDOOM != DOS Doom or "Doom for DOS". Ah, words....

Share this post


Link to post
EarthQuake said:

So what is the out-of-the-box complevel? The last (17 according to the article)?

The default configuration file lists it as -1.

17 is PrBoom 2.5.0 compatibility (not that it is stable). -1 means 'the latest one', which depend on PrBoom version. If there ever will be PrBoom 2.6, -1 would be the same as 18.

Share this post


Link to post

I wanted to ask about this quite a long time ago (if it's too advanced, may be split off the thread, moved etc.)

- What are the differences between -complevel 2 and 3 (full list of features)
- What are the differences between -complevel 2 and 4 (full list again, I heard something about lost souls vs. floor behaviour, but didn't find it written explicitly anywhere)
- Finally, differences between -complevel 2 and 9, if possible (I guess the list may be quite long)

Share this post


Link to post
vdgg said:

- What are the differences between -complevel 2 and 3 (full list of features)

With -complevel 2, as compared to -complevel 3:

  • Lost Souls don't bounce off surfaces
  • Only three original episodes of DOOM1 are supported (no Thy Flesh Consumed)
  • On the last level of each of the first three episodes of DOOM1 the death of the last boss of any class can trigger sectors tagged with the 666 special (e.g. Cyberdemon on E1M8 in UAC_DEAD.WAD, Spider Mastermind on E1M8 of NUKEMINE.WAD)

vdgg said:

- What are the differences between -complevel 2 and 4

With -complevel 4, as compared to -complevel 2:

  • Lost Souls bounce off surfaces
  • The player's Z-coordinate is not set when teleporting, which can lead the player to spawn not directly on top of the destination teleporter pad but in the air above it

vdgg said:

- Finally, differences between -complevel 2 and 9, if possible (I guess the list may be quite long)

I imagine comparing the two would be like comparing vanilla to ZDoom. ;) A full list of changes would be interesting and useful, though. Here are a few to start with:

  • Monsters don't get stuck on doortracks
  • Live monsters can be knocked off from tall sectors
  • Pain Elementals spawn unlimited number of Lost Souls
  • Blazing doors' closing sound is not doubled
  • A Thing stuck in a ceiling doesn't prevent the sector's floor from lowering
  • Stairs are built differently (vanilla fails to preserve the index of the previous sector found and restarts its linear search from the last sector of the previous staircase instead)
  • Max Health in DEH applies only to health potions
  • Support for generalized linedef and sector types, friction and pushers.
entryway could probably expand this list greatly.

Share this post


Link to post

I don't know much about the technicalities so the following might be somewhat wrong, but between complevel 2 and 9 I also noticed :

- monsters not going back to sleep once they infought something outside of player view
- (all?) overflows fixed
- a new bug forcing a switch back to your previous weapon the first time you select a weapon out of ammo
- cyberdemons and spider masterminds not roaring everytime they get a new target

Share this post


Link to post

I'm still trying to figure out why they can't have nice names and instead we have to use cryptic numbers.

Example:

const char *complevelnames[NUMCOMPLEVELS] =
{
  ...
  "boom202", // complevel 9
  ...
};
int D_CompLevelForName(const char *name)
{  
   int i;
   for(i = 0; i < NUMCOMPLEVELS; i++)
   {
      if(!strcasecmp(complevelnames[i], name))
         return i;
   }
   return -1;
}
Or if there are so many levels you'd actually concerned about the speed of the search (very unlikely), use a hash table lookup :P

Share this post


Link to post

The complevels do have internal aliases (see usage.txt) but they are too unwieldy to be used on the command line. The numbers are short and sweet and there are only four of them to remember - 2, 3, 4 and 9. Sure, cmd-line aliases like "doom2", "udoom", "fdoom" and your "boom202" could be devised but would they be easier to remember than numbers?

Share this post


Link to post
Never_Again said:

would they be easier to remember than numbers?

Yes. Names are much easier to associate with meanings than numbers are.

Share this post


Link to post

Both would be best but I like numbers. -vanilla is cool (complevel 2), but what about complevel 1 or 0? -oldvanilla, -reallyoldvanilla.

For someone not versed in command lines, -complevel 9 is as cryptic as -avg and would need to look them up anyway. The usuage.txt that prboom has is a good quick reference I use often.

Share this post


Link to post

It wouldn't be hard to support both numbers and names with -complevel (if you can't figure it out, you're not even a novice programmer :P). Most of it seems rather obvious of how to handle: doom12, doom16, doom19 (or doom2), udoom, fdoom, dosdoom, tasdoom, boomcompat, boom201, boom202, lxdoom, mbf, prboom203, prboom210, prboom211, prboom230, prboom240, prboom250

The prboom* ones are the only possibly difficult/ambiguous ones going from what's in README.compat. Still, the README.compat file shouldn't be taken away just because names are added :P

Share this post


Link to post

Quasar: well I think the reason -complevel has only ever had cryptic numbers was that it was only ever intended as a debugging / testing thing, not really meant for end users. I'm sure I read that somewhere but I can't find it now (isn't that always the way? Nevertheless it can be inferred from "the numbers are subject to change between versions" in README.compat...)

chungy: I added aliases for the common complevels (i.e. the ones that I use) in my own engine years ago, but the patch never went upstream for several reasons, one of which was that I couldn't think of good names for all the others :-) Your list is good but I think several are too long, anything over 6-8 chars is going to get annoying to type.

Some thoughts: I think to do this properly the config file would also have to have aliases stored in it, to avoid exposing the internal representation and thus gaining the ability to tweak it and add in extra complevels that were originally missed (e.g. boom_compatibility_compatibility needs splitting into two, PrBoom+'s -doom95 switch, etc.) but naturally keeping the existing numbers as aliases themselves so everything everyone is used to still works :-) (Anyone else remember when e.g. boom went from 5 to 9 and mbf went from 8 to 11?)

Share this post


Link to post
RjY said:

Your list is good but I think several are too long, anything over 6-8 chars is going to get annoying to type.

More annoying than -complevel?

Share this post


Link to post

Ha! Chungy's proposed list matches mine exactly, except that "boomvanilla" may be more intuitive than "boomcompat" (which could be mistaken for what is -complevel 9). At any rate, only complevels 0-4 and 9 are of practical value, and their proposed aliases should be easy to remember. The rest should not be used anyway except for debugging.
Well, there's also -1/17 to be considered, I propose "-latest" and "-current". It would be nice if the other two compat-minded ports (Choco and Eternity) would adopt the same convention.

Share this post


Link to post

While "boom202" is okay if you want to be explicit, it should have the simpler alias of "boom" as well. (Because, does anyone ever use a different version of Boom than that one?)

And "doom16" could be "doom1666" given that maybe one day there might hypothetically be actual emulation of doom.exe v1.6. (Main difference with 1.666 would be lost souls counting as monsters I guess.)

Share this post


Link to post
Solarn said:

More annoying than -complevel?

"-complevel boomcompat" is a bit of a mouthful, don't you think? That's what I meant, anyway. Sorry for the misunderstanding, if there was one.

Share this post


Link to post

I'd welcome it if Andrey introduced user-friendly alternative ways to set complevels. That is, keep the existing system (since many of us are used to it, and may well have batch files, etc., set up for it), but also allow people to force complevels using other command-line options.

Some suggestions:

Allow something like -cl as an abbrevation for -complevel

Allow command-line options such as -boom202 without requiring -complevel or -cl at all.

Allow other "internal" names for the complevels to be used in that way too; e.g., -prboom_5 = -complevel 16

Allow friendly forms (no more than 3 or 4 characters) for the most common complevels; e.g., -boom = -boom202 = -cl 9 = -complevel 9


While we're doing complevel wishlists, I'd also like the default complevel and [temp] complevel to be settable via the launcher.

And how about a "smart" setting for the default complevel, which works as follows:

Scan the wad(s) upon loading for any obvious Boom features. If detected, set the complevel to 9 to play the wad. Otherwise, set it to 2, 3 or 4 depending on the iwad. This would mean that if you are playing only Boom and vanilla/limit-removing wads, then you will hardly ever need to worry about the complevel at all - even when recording.

Share this post


Link to post

I agree that boomcompat is ugly, a mouthful, and not really ideal, but I couldn't think of any other name on the spot then. boomvanilla would also have a possible issue with being confused with boom 2.02, I'm not sure. Personally I don't care much for either of these names :P

Also, given how DOSBox is around these days and most people have computers well enough to run Doom in it, I'm not so sure that emulating all the historical Doom versions in PrBoom is worth the effort. I'm not a PrBoom developer but I think it's easy enough to load them in DOSBox anyway and ignore it. Still, "doom1666" is not a bad alternative if the developers do strive for plain 1.6 emulation.

Share this post


Link to post
chungy said:

I agree that boomcompat is ugly, a mouthful, and not really ideal, but I couldn't think of any other name on the spot then. boomvanilla would also have a possible issue with being confused with boom 2.02, I'm not sure. Personally I don't care much for either of these names :P


-bve, for "Boom vanilla emulation".

Share this post


Link to post
chungy said:

Also, given how DOSBox is around these days and most people have computers well enough to run Doom in it, I'm not so sure that emulating all the historical Doom versions in PrBoom is worth the effort. I'm not a PrBoom developer but I think it's easy enough to load them in DOSBox anyway and ignore it. Still, "doom1666" is not a bad alternative if the developers do strive for plain 1.6 emulation.

After working on Strife I can tell you that emulation of all versions between 1.666 and 1.9 should be relatively trivial, because we found very few differences that could be attributed to anything that changed in id's code between the two. In fact the only one we have confirmed for certain is that in v1.666, tracer targets are not cleared when save games are loaded, causing undefined pseudo-random behavior from homing missiles.

Share this post


Link to post
chungy said:

Also, given how DOSBox is around these days and most people have computers well enough to run Doom in it, I'm not so sure that emulating all the historical Doom versions in PrBoom is worth the effort.

In PrBoom - maybe, that port has been dead for years. In prBoom-plus, on the other hand, it's worth every man-hour entryway put into it for the demo support alone. Not to mention high res, uncapped fps, OpenGL, real-time monster health tracking, advanced TAS tools etc.

Share this post


Link to post

Indeed, supporting some of these obscure modes involved sorting through a real compatibility maze just for the sake of avoiding desyncs in a handful of demos. Providing a slightly more user-friendly way to access them, or squashing a few visual discrepancies, seems a small undertaking by comparison.

I'm not aware of any engine-related desync issues between 1.666 and 1.9 (complevels 1 and 2). The caveats about only partial emulation in the case of complevels 0 and 1 that I put in usage.txt could be removed, I think.

I'm not convinced we need user-friendly short forms for things like complevel 7 (which is in fact three different behaviours in one). Has anyone ever used that for playing or recording? Given that it is correctly autodetected for playback (together with the version info, which the program needs because the behaviour changed between versions 2.00, 2.01 and 2.02 of Boom), I don't see when it would ever be used.

The purpose of this is to make things simpler for users, and a list of 18 short forms (of which only 2 or 3 will ever get used) strikes me as unnecessarily complicated.

Share this post


Link to post

Which reiterates the earlier point everyone ignored so far: only four complevels are in common use

2 doom2/doom19
3 ultdoom/udoom
4 finaldoom/fdoom
9 boom

and these four is all you will ever need in 95% of cases (an example symbolic value). There are a handful of old WADs that need -complevel 2 (doom12) to work properly, a handful of demos that need a -complevel forced on playback and a few handfuls of WADs with mapping errors that are only playable with some sort of -complevel -1 setup.
That brings the total to six:

0 doom12
-1 current/latest

Everything else accounts for less than 1%, so discussing what the best alias would be for 7 (Boom's vanilla emulation) is akin to arguing about the number of angels that can fit on a pinpoint. In fact, the best alias for it might very well be something like "boomsfakevanillacompatibilitynottherealdealdontuseit" lest someone get confused and starts using it. Ditto for -complevel 1 (v1.666) - it's nice to have it available for the sake of completeness but the fewer people use it the better, all it does is make demos incompatible with v1.9-friendly ports.

Share this post


Link to post
Guest
This topic is now closed to further replies.
×