"UMAPINFO" discussion

43 minutes ago, Graf Zahl said:

Careful. Remember that the text is typed on? If the length is different, so is the timing, so this is important. Of course one should assume that it is constant as long as the same text is used.

 

Yes, this can cause multi-level demos to go out of sync.

On the string thing: Maybe that was a bad example, so let me state it differently:

All source ports should be able to take advantage of a MAPINFO parser. Advanced features that require adding new systems to the port should be on a separate line, and be ignorable by ports that don't yet want to implement the new feature. Basically, for the bulk of the MAPINFO file, you're effectively taking hard-coded values in the engine, and replacing them with variables directly set by the MAPINFO parser, if that makes sense. Those should be able to be implemented by all ports, whereas some more advanced features can be ignored by the port (at it's peril). Does that make sense?

 

@Bauul: Typically, the text length will be the same, as spaces will be added if your DeHacked Text is smaller, thus the timing is the same. And, you're not allowed to increase the size (with true DeHacked). But, in ports, they have to be careful to manage the timing. However, demos will be built with whatever text length is specified, so, unless you subsequently change the text size, demos will stay in sync.

Edited by kb1

Posted (edited)

Share this post


Link to post

Changing a MAPINFO is not that different from changing the actual level in that regard. Just because it's a separate lump doesn't mean that the data won't affect how the level plays.

 

I don't really see this as a problem. Normally you'd expect to use the same version of a mod to play back a demo as it was recorded with.

 

Share this post


Link to post
41 minutes ago, Graf Zahl said:

Careful. Remember that the text is typed on? If the length is different, so is the timing, so this is important. Of course one should assume that it is constant as long as the same text is used.

 

Yes, I'm assuming exactly that, and that is why I'm not worrying. My sole single worry would be the different amount of code before intermission and text screens causing a desync, but no tics are supposed to be run during those moments, as the Doom engine seems to be pretty much single-threaded other than audio. Since you know the engine better than me, can you think of anything I'd need to watch out for?

 

10 minutes ago, Bauul said:

Maybe I'm just being confused, but are we talking basically about desync issues if someone attempted to run a demo on a wad that had been updated with new MAPINFO?  Because almost aside from MAPINFO, that's inviting problems.  Everyone knows you don't try to run demo files on anything other than the exact version of the wad it was recorded on.

I'm going to modify the way it runs the original WADs. Now read your last sentence and take a deep (hopeful) breath.

Share this post


Link to post
13 minutes ago, Albertoni said:

I'm going to modify the way it runs the original WADs. Now read your last sentence and take a deep (hopeful) breath.

I'm being confused then!  So I know this is a really, really basic question, but why would updating a source port to read MAPINFO lumps (if present) play back demos differently in an old WAD that didn't contain a MAPINFO lump?

Share this post


Link to post

If that happened the implementation would be faulty.

 

Share this post


Link to post
1 hour ago, Bauul said:

I'm being confused then!  So I know this is a really, really basic question, but why would updating a source port to read MAPINFO lumps (if present) play back demos differently in an old WAD that didn't contain a MAPINFO lump?

Because the original IWADs will run through the new system. If there is any problem with that implementation, everything breaks down.

 

It makes very little sense to leave the current spaghetti code untouched for WADs without MAPINFO. Fear of breaking things is the only reason. And while it's a possible solution if all else fails, you'd just be adding to the pile of spaghetti.

Share this post


Link to post

If demo playback is affected by a thing the MAPINFO specified (the given example was intermission text), is there any harm in disabling such a change when -record and -playdemo are used? I don't think the demo scene would mind missing out on a wee bit of story, like.

1 person likes this

Share this post


Link to post
3 minutes ago, Albertoni said:

It makes very little sense to leave the current spaghetti code untouched for WADs without MAPINFO. Fear of breaking things is the only reason. And while it's a possible solution if all else fails, you'd just be adding to the pile of spaghetti.

On the contrary. It makes a lot of sense to leave all the old code in place, because otherwise you'd have no chance in case something goes wrong.

Have you ever seen how much seemingly needless cruft there is in PrBoom? That's all for the sole reason that even the most inane demo desync can be prevented. Were we talking about an engine that doesn't care much about such considerations things would be different, but as they are I'd rather play it safe.

1 person likes this

Share this post


Link to post
Just now, Jayextee said:

If demo playback is affected by a thing the MAPINFO specified (the given example was intermission text), is there any harm in disabling such a change when -record and -playdemo are used? I don't think the demo scene would mind missing out on a wee bit of story, like.

 

That's why no MAPINFO related feature may ever be used if no MAPINFO is specified. If a plain WAD is loaded, all the original code needs to be there to handle it.

 

3 people like this

Share this post


Link to post
8 minutes ago, Albertoni said:

Because the original IWADs will run through the new system. If there is any problem with that implementation, everything breaks down.

 

It makes very little sense to leave the current spaghetti code untouched for WADs without MAPINFO. Fear of breaking things is the only reason. And while it's a possible solution if all else fails, you'd just be adding to the pile of spaghetti.

Ah ok, thanks.  I was under the impression leaving the code untouched for WADS without MAPINFO (including the IWADS) would be exactly the right way to do it.

 

Edit: Seems I wasn't the only one!

Edited by Bauul

Posted (edited)

Share this post


Link to post

@Graf Zahl & @Bauul

 

I haven't seen the cruft, but I'll trust you. And yes, I'll play it safe. Thanks for pushing me into a "don't break compatibility" mindset. Let me rethink my route of approach to the code then...

Share this post


Link to post

I'd like to see support for custom intermission maps in the style of Doom 1 too, not sure if it warrants its own thread though.

Share this post


Link to post

I was talking in the context of the topic

Share this post


Link to post
1 hour ago, Marcaek said:

I'd like to see support for custom intermission maps in the style of Doom 1 too, not sure if it warrants its own thread though.

There's a reason why it's handled via a script in ZDoom.  Episode 2 not only has blood splats over completed maps, but also gradually builds the tower of babel throughout the episode and only renders Fortress of Mystery when you actually are entering that level.  I think there might be some map changes in Episode 3 too.

 

I'm not sure it's wise to begin down the road of intermission screen modification in a standard that's designed to be a least common denominator and easy to implement.  Maybe just a simple "draw a blood splat at X,Y" token would be okay.  Does Doom 2 even have the splat in its WAD anyway?

 

Share this post


Link to post

You can make custom intermission maps by replacing the CWILV graphics. This thread says they can only be 320x158 in vanilla, but you can make them fullscreen in prboom-plus (except the two rows of pixels at the top).

Share this post


Link to post

I guess this can get back on topic then.

Share this post


Link to post

Once the whole MAPINFO thing is running it shouldn't be too hard to backport that code from ZDoom. Unlike much of the engine, before porting it to ZScript, wi_stuff.cpp was still quite close to id's original code - and more importantly, contained.

 

 

Share this post


Link to post
19 hours ago, Graf Zahl said:

How should progress be possible if the very first thing that comes up is not some thoughts how to do it, but some thoughts why NOT to do it?

Well, the question in the thread title is "Why is it...?" and I just gave an answer to that.

 

Also, I never said it's not worth doing it, but gave reasons why other smaller projects might get higher priorities.

Share this post


Link to post
On 4/18/2017 at 4:45 PM, Death Egg said:

How is using it considered against the spirit of vanilla?

I'm confused by the original premise of the question. Vanilla ("vanilla true" in this context?) usually just means "uses only the features that are in vanilla". If MAPINFO isn't in vanilla then it shouldn't be surprising that "vanilla" ports don't support it. So what exactly do you mean? You mention PrBoom+ and Crispy Doom; are you talking about some category of ports that is midway between "vanilla" and "limit removing" and slightly more liberal about accepting new features?

Share this post


Link to post
14 hours ago, AlexMax said:

I'm not sure it's wise to begin down the road of intermission screen modification in a standard that's designed to be a least common denominator and easy to implement.  Maybe just a simple "draw a blood splat at X,Y" token would be okay.  Does Doom 2 even have the splat in its WAD anyway?

 

In general I'd agree. But don't forget that all the code for this already exists, and having just worked on wi_stuff.c, refactoring the entire background stuff out of the main code may be a good idea anyway to reduce the number of hacks in there. All in due time, though.

 

The reason why I made this stuff scriptable in ZDoom was not to get a new feature but simply as a means to clean up some piece of code that had become utterly unwieldy. And PrBoom's version doesn't look that much better, it's just missing the Raven game additions that added another layer of problems to ZDoom's version.

 

Share this post


Link to post
2 hours ago, Graf Zahl said:

In general I'd agree. But don't forget that all the code for this already exists, and having just worked on wi_stuff.c, refactoring the entire background stuff out of the main code may be a good idea anyway to reduce the number of hacks in there. All in due time, though.

 

The reason why I made this stuff scriptable in ZDoom was not to get a new feature but simply as a means to clean up some piece of code that had become utterly unwieldy. And PrBoom's version doesn't look that much better, it's just missing the Raven game additions that added another layer of problems to ZDoom's version.

 

I don't know if this if helpful or not - this is how MAPINFO is handled in KBDoom. It may be useful, simply as a reminder of what is needed to support the originals, maintaining sync:

Spoiler

/* Mapsetups */

mapsetup Doom.E1M1
{
  gamemission Doom
  episode 1
  mapnum 1
  mapname HUSTR_E1M1
  mapnameimage WILV00
  interpic WIMAP0
  music E1M1
  normalexitmapnum 2
  skytexture SKY1
  partime 30
  worldmapx 185
  worldmapy 164
}

mapsetup Doom.E1M2
{
  gamemission Doom
  episode 1
  mapnum 2
  mapname HUSTR_E1M2
  mapnameimage WILV01
  interpic WIMAP0
  music E1M2
  normalexitmapnum 3
  skytexture SKY1
  partime 75
  worldmapx 148
  worldmapy 143
}

mapsetup Doom.E1M3
{
  gamemission Doom
  episode 1
  mapnum 3
  mapname HUSTR_E1M3
  mapnameimage WILV02
  interpic WIMAP0
  music E1M3
  normalexitmapnum 4
  secretexitmapnum 9
  skytexture SKY1
  partime 120
  worldmapx 69
  worldmapy 122
}

mapsetup Doom.E1M4
{
  gamemission Doom
  episode 1
  mapnum 4
  mapname HUSTR_E1M4
  mapnameimage WILV03
  interpic WIMAP0
  music E1M4
  normalexitmapnum 5
  skytexture SKY1
  partime 90
  worldmapx 209
  worldmapy 102
}

mapsetup Doom.E1M5
{
  gamemission Doom
  episode 1
  mapnum 5
  mapname HUSTR_E1M5
  mapnameimage WILV04
  interpic WIMAP0
  music E1M5
  normalexitmapnum 6
  skytexture SKY1
  partime 165
  worldmapx 116
  worldmapy 89
}

mapsetup Doom.E1M6
{
  gamemission Doom
  episode 1
  mapnum 6
  mapname HUSTR_E1M6
  mapnameimage WILV05
  interpic WIMAP0
  music E1M6
  normalexitmapnum 7
  skytexture SKY1
  partime 180
  worldmapx 166
  worldmapy 55
}

mapsetup Doom.E1M7
{
  gamemission Doom
  episode 1
  mapnum 7
  mapname HUSTR_E1M7
  mapnameimage WILV06
  interpic WIMAP0
  music E1M7
  normalexitmapnum 8
  skytexture SKY1
  partime 180
  worldmapx 71
  worldmapy 56
}

mapsetup Doom.E1M8
{
  gamemission Doom
  episode 1
  mapnum 8
  mapname HUSTR_E1M8
  mapnameimage WILV07
  interpic WIMAP0
  music E1M8
  skytexture SKY1
  partime 30
  bossexittype E1M8
  finaleflags TEXT ENDPIC NOINTERMISSION NONEXTLEVEL
  endpic CREDIT
  endtext E1TEXT
  endflat FLOOR4_8
  endmusic Doom1_Victory
  worldmapx 135
  worldmapy 29
}

mapsetup Doom.E1M9
{
  gamemission Doom
  episode 1
  mapnum 9
  mapname HUSTR_E1M9
  mapnameimage WILV08
  interpic WIMAP0
  music E1M9
  normalexitmapnum 4
  skytexture SKY1
  partime 165
  worldmapx 71
  worldmapy 24
}

mapsetup Doom.E2M1
{
  gamemission Doom
  episode 2
  mapnum 1
  mapname HUSTR_E2M1
  mapnameimage WILV10
  interpic WIMAP1
  music E2M1
  normalexitmapnum 2
  skytexture SKY2
  partime 90
  worldmapx 254
  worldmapy 25
}

mapsetup Doom.E2M2
{
  gamemission Doom
  episode 2
  mapnum 2
  mapname HUSTR_E2M2
  mapnameimage WILV11
  interpic WIMAP1
  music E2M2
  normalexitmapnum 3
  skytexture SKY2
  partime 90
  worldmapx 97
  worldmapy 50
}

mapsetup Doom.E2M3
{
  gamemission Doom
  episode 2
  mapnum 3
  mapname HUSTR_E2M3
  mapnameimage WILV12
  interpic WIMAP1
  music E2M3
  normalexitmapnum 4
  skytexture SKY2
  partime 90
  worldmapx 188
  worldmapy 64
}

mapsetup Doom.E2M4
{
  gamemission Doom
  episode 2
  mapnum 4
  mapname HUSTR_E2M4
  mapnameimage WILV13
  interpic WIMAP1
  music E2M4
  normalexitmapnum 5
  skytexture SKY2
  partime 120
  worldmapx 128
  worldmapy 78
}

mapsetup Doom.E2M5
{
  gamemission Doom
  episode 2
  mapnum 5
  mapname HUSTR_E2M5
  mapnameimage WILV14
  interpic WIMAP1
  music E2M5
  normalexitmapnum 6
  secretexitmapnum 9
  skytexture SKY2
  partime 90
  worldmapx 214
  worldmapy 92
}

mapsetup Doom.E2M6
{
  gamemission Doom
  episode 2
  mapnum 6
  mapname HUSTR_E2M6
  mapnameimage WILV15
  interpic WIMAP1
  music E2M6
  normalexitmapnum 7
  skytexture SKY2
  partime 360
  worldmapx 133
  worldmapy 130
}

mapsetup Doom.E2M7
{
  gamemission Doom
  episode 2
  mapnum 7
  mapname HUSTR_E2M7
  mapnameimage WILV16
  interpic WIMAP1
  music E2M7
  normalexitmapnum 8
  skytexture SKY2
  partime 240
  worldmapx 208
  worldmapy 136
}

mapsetup Doom.E2M8
{
  gamemission Doom
  episode 2
  mapnum 8
  mapname HUSTR_E2M8
  mapnameimage WILV17
  interpic WIMAP1
  music E2M8
  skytexture SKY2
  partime 30
  bossexittype E2M8
  finaleflags TEXT ENDPIC NOINTERMISSION NONEXTLEVEL
  endpic VICTORY2
  endtext E2TEXT
  endflat SFLR6_1
  endmusic Doom1_Victory
  worldmapx 148
  worldmapy 140
}

mapsetup Doom.E2M9
{
  gamemission Doom
  episode 2
  mapnum 9
  mapname HUSTR_E2M9
  mapnameimage WILV18
  interpic WIMAP1
  music E2M9
  normalexitmapnum 6
  skytexture SKY2
  partime 170
  worldmapx 235
  worldmapy 158
}

mapsetup Doom.E3M1
{
  gamemission Doom
  episode 3
  mapnum 1
  mapname HUSTR_E3M1
  mapnameimage WILV20
  interpic WIMAP2
  music E3M1
  normalexitmapnum 2
  skytexture SKY3
  partime 90
  worldmapx 156
  worldmapy 168
}

mapsetup Doom.E3M2
{
  gamemission Doom
  episode 3
  mapnum 2
  mapname HUSTR_E3M2
  mapnameimage WILV21
  interpic WIMAP2
  music E3M2
  normalexitmapnum 3
  skytexture SKY3
  partime 45
  worldmapx 48
  worldmapy 154
}

mapsetup Doom.E3M3
{
  gamemission Doom
  episode 3
  mapnum 3
  mapname HUSTR_E3M3
  mapnameimage WILV22
  interpic WIMAP2
  music E3M3
  normalexitmapnum 4
  skytexture SKY3
  partime 90
  worldmapx 174
  worldmapy 95
}

mapsetup Doom.E3M4
{
  gamemission Doom
  episode 3
  mapnum 4
  mapname HUSTR_E3M4
  mapnameimage WILV23
  interpic WIMAP2
  music E3M4
  normalexitmapnum 5
  skytexture SKY3
  partime 150
  worldmapx 265
  worldmapy 75
}

mapsetup Doom.E3M5
{
  gamemission Doom
  episode 3
  mapnum 5
  mapname HUSTR_E3M5
  mapnameimage WILV24
  interpic WIMAP2
  music E3M5
  normalexitmapnum 6
  skytexture SKY3
  partime 90
  worldmapx 130
  worldmapy 48
}

mapsetup Doom.E3M6
{
  gamemission Doom
  episode 3
  mapnum 6
  mapname HUSTR_E3M6
  mapnameimage WILV25
  interpic WIMAP2
  music E3M6
  normalexitmapnum 7
  secretexitmapnum 9
  skytexture SKY3
  partime 90
  worldmapx 279
  worldmapy 23
}

mapsetup Doom.E3M7
{
  gamemission Doom
  episode 3
  mapnum 7
  mapname HUSTR_E3M7
  mapnameimage WILV26
  interpic WIMAP2
  music E3M7
  normalexitmapnum 8
  skytexture SKY3
  partime 165
  worldmapx 198
  worldmapy 48
}

mapsetup Doom.E3M8
{
  gamemission Doom
  episode 3
  mapnum 8
  mapname HUSTR_E3M8
  mapnameimage WILV27
  interpic WIMAP2
  music E3M8
  skytexture SKY3
  partime 30
  bossexittype E3M8
  finaleflags TEXT BUNNY NOINTERMISSION NONEXTLEVEL
  endtext E3TEXT
  endflat MFLR8_4
  endmusic Doom1_Victory
  worldmapx 140
  worldmapy 25
}

mapsetup Doom.E3M9
{
  gamemission Doom
  episode 3
  mapnum 9
  mapname HUSTR_E3M9
  mapnameimage WILV28
  interpic WIMAP2
  music E3M9
  normalexitmapnum 7
  skytexture SKY3
  partime 135
  worldmapx 281
  worldmapy 136
}

mapsetup Doom.E4M1
{
  gamemission Doom
  episode 4
  mapnum 1
  mapname HUSTR_E4M1
  mapnameimage WILV30
  interpic INTERPIC
  music E4M1
  normalexitmapnum 2
  skytexture SKY4
}

mapsetup Doom.E4M2
{
  gamemission Doom
  episode 4
  mapnum 2
  mapname HUSTR_E4M2
  mapnameimage WILV31
  interpic INTERPIC
  music E4M2
  normalexitmapnum 3
  secretexitmapnum 9
  skytexture SKY4
}

mapsetup Doom.E4M3
{
  gamemission Doom
  episode 4
  mapnum 3
  mapname HUSTR_E4M3
  mapnameimage WILV32
  interpic INTERPIC
  music E4M3
  normalexitmapnum 4
  skytexture SKY4
}

mapsetup Doom.E4M4
{
  gamemission Doom
  episode 4
  mapnum 4
  mapname HUSTR_E4M4
  mapnameimage WILV33
  interpic INTERPIC
  music E4M4
  normalexitmapnum 5
  skytexture SKY4
}

mapsetup Doom.E4M5
{
  gamemission Doom
  episode 4
  mapnum 5
  mapname HUSTR_E4M5
  mapnameimage WILV34
  interpic INTERPIC
  music E4M5
  normalexitmapnum 6
  skytexture SKY4
}

mapsetup Doom.E4M6
{
  gamemission Doom
  episode 4
  mapnum 6
  mapname HUSTR_E4M6
  mapnameimage WILV35
  bossexittype E4M6
  interpic INTERPIC
  music E4M6
  normalexitmapnum 7
  skytexture SKY4
}

mapsetup Doom.E4M7
{
  gamemission Doom
  episode 4
  mapnum 7
  mapname HUSTR_E4M7
  mapnameimage WILV36
  interpic INTERPIC
  music E4M7
  normalexitmapnum 8
  skytexture SKY4
}

mapsetup Doom.E4M8
{
  gamemission Doom
  episode 4
  mapnum 8
  mapname HUSTR_E4M8
  mapnameimage WILV37
  interpic INTERPIC
  music E4M8
  skytexture SKY4
  bossexittype E4M8
  finaleflags TEXT ENDPIC NOINTERMISSION NONEXTLEVEL
  endpic ENDPIC
  endtext E4TEXT
  endflat MFLR8_3
  endmusic Doom1_Victory
}

mapsetup Doom.E4M9
{
  gamemission Doom
  episode 4
  mapnum 9
  mapname HUSTR_E4M9
  mapnameimage WILV38
  interpic INTERPIC
  music E4M9
  normalexitmapnum 3
  skytexture SKY4
}

mapsetup DoomII.MAP01
{
  gamemission Doom2
  episode 1
  mapnum 1
  mapname HUSTR_1
  mapnameimage CWILV00
  interpic INTERPIC
  music MAP01
  normalexitmapnum 2
  skytexture SKY1
  partime 30
}

mapsetup DoomII.MAP02
{
  gamemission Doom2
  episode 1
  mapnum 2
  mapname HUSTR_2
  mapnameimage CWILV01
  interpic INTERPIC
  music MAP02
  normalexitmapnum 3
  skytexture SKY1
  partime 90
}

mapsetup DoomII.MAP03
{
  gamemission Doom2
  episode 1
  mapnum 3
  mapname HUSTR_3
  mapnameimage CWILV02
  interpic INTERPIC
  music MAP03
  normalexitmapnum 4
  skytexture SKY1
  partime 120
}

mapsetup DoomII.MAP04
{
  gamemission Doom2
  episode 1
  mapnum 4
  mapname HUSTR_4
  mapnameimage CWILV03
  interpic INTERPIC
  music MAP04
  normalexitmapnum 5
  skytexture SKY1
  partime 120
}

mapsetup DoomII.MAP05
{
  gamemission Doom2
  episode 1
  mapnum 5
  mapname HUSTR_5
  mapnameimage CWILV04
  interpic INTERPIC
  music MAP05
  normalexitmapnum 6
  skytexture SKY1
  partime 90
}

mapsetup DoomII.MAP06
{
  gamemission Doom2
  episode 1
  mapnum 6
  mapname HUSTR_6
  mapnameimage CWILV05
  interpic INTERPIC
  music MAP06
  normalexitmapnum 7
  skytexture SKY1
  partime 150
  finaleflags TEXT
  endflat SLIME16
  endtext C1TEXT
  endmusic Doom2_Victory
}

mapsetup DoomII.MAP07
{
  gamemission Doom2
  episode 1
  mapnum 7
  mapname HUSTR_7
  mapnameimage CWILV06
  bossexittype MAP07
  interpic INTERPIC
  music MAP07
  normalexitmapnum 8
  skytexture SKY1
  partime 120
}

mapsetup DoomII.MAP08
{
  gamemission Doom2
  episode 1
  mapnum 8
  mapname HUSTR_8
  mapnameimage CWILV07
  interpic INTERPIC
  music MAP08
  normalexitmapnum 9
  skytexture SKY1
  partime 120
}

mapsetup DoomII.MAP09
{
  gamemission Doom2
  episode 1
  mapnum 9
  mapname HUSTR_9
  mapnameimage CWILV08
  interpic INTERPIC
  music MAP09
  normalexitmapnum 10
  skytexture SKY1
  partime 270
}

mapsetup DoomII.MAP10
{
  gamemission Doom2
  episode 1
  mapnum 10
  mapname HUSTR_10
  mapnameimage CWILV09
  interpic INTERPIC
  music MAP10
  normalexitmapnum 11
  skytexture SKY1
  partime 90
}

mapsetup DoomII.MAP11
{
  gamemission Doom2
  episode 1
  mapnum 11
  mapname HUSTR_11
  mapnameimage CWILV10
  interpic INTERPIC
  music MAP11
  normalexitmapnum 12
  skytexture SKY1
  partime 210
  finaleflags TEXT
  endflat RROCK14
  endtext C2TEXT
  endmusic Doom2_Victory
}

mapsetup DoomII.MAP12
{
  gamemission Doom2
  episode 1
  mapnum 12
  mapname HUSTR_12
  mapnameimage CWILV11
  interpic INTERPIC
  music MAP12
  normalexitmapnum 13
  skytexture SKY2
  partime 150
}

mapsetup DoomII.MAP13
{
  gamemission Doom2
  episode 1
  mapnum 13
  mapname HUSTR_13
  mapnameimage CWILV12
  interpic INTERPIC
  music MAP13
  normalexitmapnum 14
  skytexture SKY2
  partime 150
}

mapsetup DoomII.MAP14
{
  gamemission Doom2
  episode 1
  mapnum 14
  mapname HUSTR_14
  mapnameimage CWILV13
  interpic INTERPIC
  music MAP14
  normalexitmapnum 15
  skytexture SKY2
  partime 150
}

mapsetup DoomII.MAP15
{
  gamemission Doom2
  episode 1
  mapnum 15
  mapname HUSTR_15
  mapnameimage CWILV14
  interpic INTERPIC
  music MAP15
  normalexitmapnum 16
  secretexitmapnum 31
  skytexture SKY2
  partime 210
  finaleflags TEXT SECRETONLY NOENTERING
  endflat RROCK13
  endtext C5TEXT
  endmusic Doom2_Victory
}

mapsetup DoomII.MAP16
{
  gamemission Doom2
  episode 1
  mapnum 16
  mapname HUSTR_16
  mapnameimage CWILV15
  interpic INTERPIC
  music MAP16
  normalexitmapnum 17
  skytexture SKY2
  partime 150
}

mapsetup DoomII.MAP17
{
  gamemission Doom2
  episode 1
  mapnum 17
  mapname HUSTR_17
  mapnameimage CWILV16
  interpic INTERPIC
  music MAP17
  normalexitmapnum 18
  skytexture SKY2
  partime 420
}

mapsetup DoomII.MAP18
{
  gamemission Doom2
  episode 1
  mapnum 18
  mapname HUSTR_18
  mapnameimage CWILV17
  interpic INTERPIC
  music MAP18
  normalexitmapnum 19
  skytexture SKY2
  partime 150
}

mapsetup DoomII.MAP19
{
  gamemission Doom2
  episode 1
  mapnum 19
  mapname HUSTR_19
  mapnameimage CWILV18
  interpic INTERPIC
  music MAP19
  normalexitmapnum 20
  skytexture SKY2
  partime 210
}

mapsetup DoomII.MAP20
{
  gamemission Doom2
  episode 1
  mapnum 20
  mapname HUSTR_20
  mapnameimage CWILV19
  interpic INTERPIC
  music MAP20
  normalexitmapnum 21
  skytexture SKY2
  partime 150
  finaleflags TEXT
  endflat RROCK07
  endtext C3TEXT
  endmusic Doom2_Victory
}

mapsetup DoomII.MAP21
{
  gamemission Doom2
  episode 1
  mapnum 21
  mapname HUSTR_21
  mapnameimage CWILV20
  interpic INTERPIC
  music MAP21
  normalexitmapnum 22
  skytexture SKY3
  partime 240
}

mapsetup DoomII.MAP22
{
  gamemission Doom2
  episode 1
  mapnum 22
  mapname HUSTR_22
  mapnameimage CWILV21
  interpic INTERPIC
  music MAP22
  normalexitmapnum 23
  skytexture SKY3
  partime 150
}

mapsetup DoomII.MAP23
{
  gamemission Doom2
  episode 1
  mapnum 23
  mapname HUSTR_23
  mapnameimage CWILV22
  interpic INTERPIC
  music MAP23
  normalexitmapnum 24
  skytexture SKY3
  partime 180
}

mapsetup DoomII.MAP24
{
  gamemission Doom2
  episode 1
  mapnum 24
  mapname HUSTR_24
  mapnameimage CWILV23
  interpic INTERPIC
  music MAP24
  normalexitmapnum 25
  skytexture SKY3
  partime 150
}

mapsetup DoomII.MAP25
{
  gamemission Doom2
  episode 1
  mapnum 25
  mapname HUSTR_25
  mapnameimage CWILV24
  interpic INTERPIC
  music MAP25
  normalexitmapnum 26
  skytexture SKY3
  partime 150
}

mapsetup DoomII.MAP26
{
  gamemission Doom2
  episode 1
  mapnum 26
  mapname HUSTR_26
  mapnameimage CWILV25
  interpic INTERPIC
  music MAP26
  normalexitmapnum 27
  skytexture SKY3
  partime 300
}

mapsetup DoomII.MAP27
{
  gamemission Doom2
  episode 1
  mapnum 27
  mapname HUSTR_27
  mapnameimage CWILV26
  interpic INTERPIC
  music MAP27
  normalexitmapnum 28
  skytexture SKY3
  partime 330
}

mapsetup DoomII.MAP28
{
  gamemission Doom2
  episode 1
  mapnum 28
  mapname HUSTR_28
  mapnameimage CWILV27
  interpic INTERPIC
  music MAP28
  normalexitmapnum 29
  skytexture SKY3
  partime 420
}

mapsetup DoomII.MAP29
{
  gamemission Doom2
  episode 1
  mapnum 29
  mapname HUSTR_29
  mapnameimage CWILV28
  interpic INTERPIC
  music MAP29
  normalexitmapnum 30
  skytexture SKY3
  partime 300
}

mapsetup DoomII.MAP30
{
  gamemission Doom2
  episode 1
  mapnum 30
  mapname HUSTR_30
  mapnameimage CWILV29
  interpic INTERPIC
  music MAP30
  normalexitmapnum 31
  skytexture SKY3
  partime 180
  finaleflags TEXT CAST NOENTERING NONEXTLEVEL
  endflat RROCK17
  endtext C4TEXT
  endmusic Doom2_Victory
}

mapsetup DoomII.MAP31
{
  gamemission Doom2
  episode 1
  mapnum 31
  mapname HUSTR_31
  mapnameimage CWILV30
  interpic INTERPIC
  music MAP31
  normalexitmapnum 16
  secretexitmapnum 32
  skytexture SKY3
  partime 120
  finaleflags TEXT SECRETONLY
  endflat RROCK19
  endtext C6TEXT
  endmusic Doom2_Victory
}

mapsetup DoomII.MAP32
{
  gamemission Doom2
  episode 1
  mapnum 32
  mapname HUSTR_32
  mapnameimage CWILV31
  interpic INTERPIC
  music MAP32
  normalexitmapnum 16
  skytexture SKY3
  partime 30
}

mapsetup Plutonia.MAP01
{
  gamemission Plutonia
  episode 1
  mapnum 1
  mapname PHUSTR_1
  mapnameimage CWILV00
  interpic INTERPIC
  music MAP01
  normalexitmapnum 2
  skytexture SKY1
  partime 30
}

mapsetup Plutonia.MAP02
{
  gamemission Plutonia
  episode 1
  mapnum 2
  mapname PHUSTR_2
  mapnameimage CWILV01
  interpic INTERPIC
  music MAP02
  normalexitmapnum 3
  skytexture SKY1
  partime 90
}

mapsetup Plutonia.MAP03
{
  gamemission Plutonia
  episode 1
  mapnum 3
  mapname PHUSTR_3
  mapnameimage CWILV02
  interpic INTERPIC
  music MAP03
  normalexitmapnum 4
  skytexture SKY1
  partime 120
}

mapsetup Plutonia.MAP04
{
  gamemission Plutonia
  episode 1
  mapnum 4
  mapname PHUSTR_4
  mapnameimage CWILV03
  interpic INTERPIC
  music MAP04
  normalexitmapnum 5
  skytexture SKY1
  partime 120
}

mapsetup Plutonia.MAP05
{
  gamemission Plutonia
  episode 1
  mapnum 5
  mapname PHUSTR_5
  mapnameimage CWILV04
  interpic INTERPIC
  music MAP05
  normalexitmapnum 6
  skytexture SKY1
  partime 90
}

mapsetup Plutonia.MAP06
{
  gamemission Plutonia
  episode 1
  mapnum 6
  mapname PHUSTR_6
  mapnameimage CWILV05
  interpic INTERPIC
  music MAP06
  normalexitmapnum 7
  skytexture SKY1
  partime 150
  finaleflags TEXT
  endflat SLIME16
  endtext P1TEXT
  endmusic Doom2_Victory
}

mapsetup Plutonia.MAP07
{
  gamemission Plutonia
  episode 1
  mapnum 7
  mapname PHUSTR_7
  mapnameimage CWILV06
  bossexittype MAP07
  interpic INTERPIC
  music MAP07
  normalexitmapnum 8
  skytexture SKY1
  partime 120
}

mapsetup Plutonia.MAP08
{
  gamemission Plutonia
  episode 1
  mapnum 8
  mapname PHUSTR_8
  mapnameimage CWILV07
  interpic INTERPIC
  music MAP08
  normalexitmapnum 9
  skytexture SKY1
  partime 120
}

mapsetup Plutonia.MAP09
{
  gamemission Plutonia
  episode 1
  mapnum 9
  mapname PHUSTR_9
  mapnameimage CWILV08
  interpic INTERPIC
  music MAP09
  normalexitmapnum 10
  skytexture SKY1
  partime 270
}

mapsetup Plutonia.MAP10
{
  gamemission Plutonia
  episode 1
  mapnum 10
  mapname PHUSTR_10
  mapnameimage CWILV09
  interpic INTERPIC
  music MAP10
  normalexitmapnum 11
  skytexture SKY1
  partime 90
}

mapsetup Plutonia.MAP11
{
  gamemission Plutonia
  episode 1
  mapnum 11
  mapname PHUSTR_11
  mapnameimage CWILV10
  interpic INTERPIC
  music MAP11
  normalexitmapnum 12
  skytexture SKY1
  partime 210
  finaleflags TEXT
  endflat RROCK14
  endtext P2TEXT
  endmusic Doom2_Victory
}

mapsetup Plutonia.MAP12
{
  gamemission Plutonia
  episode 1
  mapnum 12
  mapname PHUSTR_12
  mapnameimage CWILV11
  interpic INTERPIC
  music MAP12
  normalexitmapnum 13
  skytexture SKY2
  partime 150
}

mapsetup Plutonia.MAP13
{
  gamemission Plutonia
  episode 1
  mapnum 13
  mapname PHUSTR_13
  mapnameimage CWILV12
  interpic INTERPIC
  music MAP13
  normalexitmapnum 14
  skytexture SKY2
  partime 150
}

mapsetup Plutonia.MAP14
{
  gamemission Plutonia
  episode 1
  mapnum 14
  mapname PHUSTR_14
  mapnameimage CWILV13
  interpic INTERPIC
  music MAP14
  normalexitmapnum 15
  skytexture SKY2
  partime 150
}

mapsetup Plutonia.MAP15
{
  gamemission Plutonia
  episode 1
  mapnum 15
  mapname PHUSTR_15
  mapnameimage CWILV14
  interpic INTERPIC
  music MAP15
  normalexitmapnum 16
  secretexitmapnum 31
  skytexture SKY2
  partime 210
  finaleflags TEXT SECRETONLY NOENTERING
  endflat RROCK13
  endtext P5TEXT
  endmusic Doom2_Victory
}

mapsetup Plutonia.MAP16
{
  gamemission Plutonia
  episode 1
  mapnum 16
  mapname PHUSTR_16
  mapnameimage CWILV15
  interpic INTERPIC
  music MAP16
  normalexitmapnum 17
  skytexture SKY2
  partime 150
}

mapsetup Plutonia.MAP17
{
  gamemission Plutonia
  episode 1
  mapnum 17
  mapname PHUSTR_17
  mapnameimage CWILV16
  interpic INTERPIC
  music MAP17
  normalexitmapnum 18
  skytexture SKY2
  partime 420
}

mapsetup Plutonia.MAP18
{
  gamemission Plutonia
  episode 1
  mapnum 18
  mapname PHUSTR_18
  mapnameimage CWILV17
  interpic INTERPIC
  music MAP18
  normalexitmapnum 19
  skytexture SKY2
  partime 150
}

mapsetup Plutonia.MAP19
{
  gamemission Plutonia
  episode 1
  mapnum 19
  mapname PHUSTR_19
  mapnameimage CWILV18
  interpic INTERPIC
  music MAP19
  normalexitmapnum 20
  skytexture SKY2
  partime 210
}

mapsetup Plutonia.MAP20
{
  gamemission Plutonia
  episode 1
  mapnum 20
  mapname PHUSTR_20
  mapnameimage CWILV19
  interpic INTERPIC
  music MAP20
  normalexitmapnum 21
  skytexture SKY2
  partime 150
  finaleflags TEXT
  endflat RROCK07
  endtext P3TEXT
  endmusic Doom2_Victory
}

mapsetup Plutonia.MAP21
{
  gamemission Plutonia
  episode 1
  mapnum 21
  mapname PHUSTR_21
  mapnameimage CWILV20
  interpic INTERPIC
  music MAP21
  normalexitmapnum 22
  skytexture SKY3
  partime 240
}

mapsetup Plutonia.MAP22
{
  gamemission Plutonia
  episode 1
  mapnum 22
  mapname PHUSTR_22
  mapnameimage CWILV21
  interpic INTERPIC
  music MAP22
  normalexitmapnum 23
  skytexture SKY3
  partime 150
}

mapsetup Plutonia.MAP23
{
  gamemission Plutonia
  episode 1
  mapnum 23
  mapname PHUSTR_23
  mapnameimage CWILV22
  interpic INTERPIC
  music MAP23
  normalexitmapnum 24
  skytexture SKY3
  partime 180
}

mapsetup Plutonia.MAP24
{
  gamemission Plutonia
  episode 1
  mapnum 24
  mapname PHUSTR_24
  mapnameimage CWILV23
  interpic INTERPIC
  music MAP24
  normalexitmapnum 25
  skytexture SKY3
  partime 150
}

mapsetup Plutonia.MAP25
{
  gamemission Plutonia
  episode 1
  mapnum 25
  mapname PHUSTR_25
  mapnameimage CWILV24
  interpic INTERPIC
  music MAP25
  normalexitmapnum 26
  skytexture SKY3
  partime 150
}

mapsetup Plutonia.MAP26
{
  gamemission Plutonia
  episode 1
  mapnum 26
  mapname PHUSTR_26
  mapnameimage CWILV25
  interpic INTERPIC
  music MAP26
  normalexitmapnum 27
  skytexture SKY3
  partime 300
}

mapsetup Plutonia.MAP27
{
  gamemission Plutonia
  episode 1
  mapnum 27
  mapname PHUSTR_27
  mapnameimage CWILV26
  interpic INTERPIC
  music MAP27
  normalexitmapnum 28
  skytexture SKY3
  partime 330
}

mapsetup Plutonia.MAP28
{
  gamemission Plutonia
  episode 1
  mapnum 28
  mapname PHUSTR_28
  mapnameimage CWILV27
  interpic INTERPIC
  music MAP28
  normalexitmapnum 29
  skytexture SKY3
  partime 420
}

mapsetup Plutonia.MAP29
{
  gamemission Plutonia
  episode 1
  mapnum 29
  mapname PHUSTR_29
  mapnameimage CWILV28
  interpic INTERPIC
  music MAP29
  normalexitmapnum 30
  skytexture SKY3
  partime 300
}

mapsetup Plutonia.MAP30
{
  gamemission Plutonia
  episode 1
  mapnum 30
  mapname PHUSTR_30
  mapnameimage CWILV29
  interpic INTERPIC
  music MAP30
  normalexitmapnum 31
  skytexture SKY3
  partime 180
  finaleflags TEXT CAST NOENTERING NONEXTLEVEL
  endflat RROCK17
  endtext P4TEXT
  endmusic Doom2_Victory
}

mapsetup Plutonia.MAP31
{
  gamemission Plutonia
  episode 1
  mapnum 31
  mapname PHUSTR_31
  mapnameimage CWILV30
  interpic INTERPIC
  music MAP31
  normalexitmapnum 16
  secretexitmapnum 32
  skytexture SKY3
  partime 120
  finaleflags TEXT SECRETONLY
  endflat RROCK19
  endtext P6TEXT
  endmusic Doom2_Victory
}

mapsetup Plutonia.MAP32
{
  gamemission Plutonia
  episode 1
  mapnum 32
  mapname PHUSTR_32
  mapnameimage CWILV31
  interpic INTERPIC
  music MAP32
  normalexitmapnum 16
  skytexture SKY3
  partime 30
}

mapsetup TNT.MAP01
{
  gamemission TNT
  episode 1
  mapnum 1
  mapname THUSTR_1
  mapnameimage CWILV00
  interpic INTERPIC
  music MAP01
  normalexitmapnum 2
  skytexture SKY1
  partime 30
}

mapsetup TNT.MAP02
{
  gamemission TNT
  episode 1
  mapnum 2
  mapname THUSTR_2
  mapnameimage CWILV01
  interpic INTERPIC
  music MAP02
  normalexitmapnum 3
  skytexture SKY1
  partime 90
}

mapsetup TNT.MAP03
{
  gamemission TNT
  episode 1
  mapnum 3
  mapname THUSTR_3
  mapnameimage CWILV02
  interpic INTERPIC
  music MAP03
  normalexitmapnum 4
  skytexture SKY1
  partime 120
}

mapsetup TNT.MAP04
{
  gamemission TNT
  episode 1
  mapnum 4
  mapname THUSTR_4
  mapnameimage CWILV03
  interpic INTERPIC
  music MAP04
  normalexitmapnum 5
  skytexture SKY1
  partime 120
}

mapsetup TNT.MAP05
{
  gamemission TNT
  episode 1
  mapnum 5
  mapname THUSTR_5
  mapnameimage CWILV04
  interpic INTERPIC
  music MAP05
  normalexitmapnum 6
  skytexture SKY1
  partime 90
}

mapsetup TNT.MAP06
{
  gamemission TNT
  episode 1
  mapnum 6
  mapname THUSTR_6
  mapnameimage CWILV05
  interpic INTERPIC
  music MAP06
  normalexitmapnum 7
  skytexture SKY1
  partime 150
  finaleflags TEXT
  endflat SLIME16
  endtext T1TEXT
  endmusic Doom2_Victory
}

mapsetup TNT.MAP07
{
  gamemission TNT
  episode 1
  mapnum 7
  mapname THUSTR_7
  mapnameimage CWILV06
  bossexittype MAP07
  interpic INTERPIC
  music MAP07
  normalexitmapnum 8
  skytexture SKY1
  partime 120
}

mapsetup TNT.MAP08
{
  gamemission TNT
  episode 1
  mapnum 8
  mapname THUSTR_8
  mapnameimage CWILV07
  interpic INTERPIC
  music MAP08
  normalexitmapnum 9
  skytexture SKY1
  partime 120
}

mapsetup TNT.MAP09
{
  gamemission TNT
  episode 1
  mapnum 9
  mapname THUSTR_9
  mapnameimage CWILV08
  interpic INTERPIC
  music MAP09
  normalexitmapnum 10
  skytexture SKY1
  partime 270
}

mapsetup TNT.MAP10
{
  gamemission TNT
  episode 1
  mapnum 10
  mapname THUSTR_10
  mapnameimage CWILV09
  interpic INTERPIC
  music MAP10
  normalexitmapnum 11
  skytexture SKY1
  partime 90
}

mapsetup TNT.MAP11
{
  gamemission TNT
  episode 1
  mapnum 11
  mapname THUSTR_11
  mapnameimage CWILV10
  interpic INTERPIC
  music MAP11
  normalexitmapnum 12
  skytexture SKY1
  partime 210
  finaleflags TEXT
  endflat RROCK14
  endtext T2TEXT
  endmusic Doom2_Victory
}

mapsetup TNT.MAP12
{
  gamemission TNT
  episode 1
  mapnum 12
  mapname THUSTR_12
  mapnameimage CWILV11
  interpic INTERPIC
  music MAP12
  normalexitmapnum 13
  skytexture SKY2
  partime 150
}

mapsetup TNT.MAP13
{
  gamemission TNT
  episode 1
  mapnum 13
  mapname THUSTR_13
  mapnameimage CWILV12
  interpic INTERPIC
  music MAP13
  normalexitmapnum 14
  skytexture SKY2
  partime 150
}

mapsetup TNT.MAP14
{
  gamemission TNT
  episode 1
  mapnum 14
  mapname THUSTR_14
  mapnameimage CWILV13
  interpic INTERPIC
  music MAP14
  normalexitmapnum 15
  skytexture SKY2
  partime 150
}

mapsetup TNT.MAP15
{
  gamemission TNT
  episode 1
  mapnum 15
  mapname THUSTR_15
  mapnameimage CWILV14
  interpic INTERPIC
  music MAP15
  normalexitmapnum 16
  secretexitmapnum 31
  skytexture SKY2
  partime 210
  finaleflags TEXT SECRETONLY NOENTERING
  endflat RROCK13
  endtext T5TEXT
  endmusic Doom2_Victory
}

mapsetup TNT.MAP16
{
  gamemission TNT
  episode 1
  mapnum 16
  mapname THUSTR_16
  mapnameimage CWILV15
  interpic INTERPIC
  music MAP16
  normalexitmapnum 17
  skytexture SKY2
  partime 150
}

mapsetup TNT.MAP17
{
  gamemission TNT
  episode 1
  mapnum 17
  mapname THUSTR_17
  mapnameimage CWILV16
  interpic INTERPIC
  music MAP17
  normalexitmapnum 18
  skytexture SKY2
  partime 420
}

mapsetup TNT.MAP18
{
  gamemission TNT
  episode 1
  mapnum 18
  mapname THUSTR_18
  mapnameimage CWILV17
  interpic INTERPIC
  music MAP18
  normalexitmapnum 19
  skytexture SKY2
  partime 150
}

mapsetup TNT.MAP19
{
  gamemission TNT
  episode 1
  mapnum 19
  mapname THUSTR_19
  mapnameimage CWILV18
  interpic INTERPIC
  music MAP19
  normalexitmapnum 20
  skytexture SKY2
  partime 210
}

mapsetup TNT.MAP20
{
  gamemission TNT
  episode 1
  mapnum 20
  mapname THUSTR_20
  mapnameimage CWILV19
  interpic INTERPIC
  music MAP20
  normalexitmapnum 21
  skytexture SKY2
  partime 150
  finaleflags TEXT
  endflat RROCK07
  endtext T3TEXT
  endmusic Doom2_Victory
}

mapsetup TNT.MAP21
{
  gamemission TNT
  episode 1
  mapnum 21
  mapname THUSTR_21
  mapnameimage CWILV20
  interpic INTERPIC
  music MAP21
  normalexitmapnum 22
  skytexture SKY3
  partime 240
}

mapsetup TNT.MAP22
{
  gamemission TNT
  episode 1
  mapnum 22
  mapname THUSTR_22
  mapnameimage CWILV21
  interpic INTERPIC
  music MAP22
  normalexitmapnum 23
  skytexture SKY3
  partime 150
}

mapsetup TNT.MAP23
{
  gamemission TNT
  episode 1
  mapnum 23
  mapname THUSTR_23
  mapnameimage CWILV22
  interpic INTERPIC
  music MAP23
  normalexitmapnum 24
  skytexture SKY3
  partime 180
}

mapsetup TNT.MAP24
{
  gamemission TNT
  episode 1
  mapnum 24
  mapname THUSTR_24
  mapnameimage CWILV23
  interpic INTERPIC
  music MAP24
  normalexitmapnum 25
  skytexture SKY3
  partime 150
}

mapsetup TNT.MAP25
{
  gamemission TNT
  episode 1
  mapnum 25
  mapname THUSTR_25
  mapnameimage CWILV24
  interpic INTERPIC
  music MAP25
  normalexitmapnum 26
  skytexture SKY3
  partime 150
}

mapsetup TNT.MAP26
{
  gamemission TNT
  episode 1
  mapnum 26
  mapname THUSTR_26
  mapnameimage CWILV25
  interpic INTERPIC
  music MAP26
  normalexitmapnum 27
  skytexture SKY3
  partime 300
}

mapsetup TNT.MAP27
{
  gamemission TNT
  episode 1
  mapnum 27
  mapname THUSTR_27
  mapnameimage CWILV26
  interpic INTERPIC
  music MAP27
  normalexitmapnum 28
  skytexture SKY3
  partime 330
}

mapsetup TNT.MAP28
{
  gamemission TNT
  episode 1
  mapnum 28
  mapname THUSTR_28
  mapnameimage CWILV27
  interpic INTERPIC
  music MAP28
  normalexitmapnum 29
  skytexture SKY3
  partime 420
}

mapsetup TNT.MAP29
{
  gamemission TNT
  episode 1
  mapnum 29
  mapname THUSTR_29
  mapnameimage CWILV28
  interpic INTERPIC
  music MAP29
  normalexitmapnum 30
  skytexture SKY3
  partime 300
}

mapsetup TNT.MAP30
{
  gamemission TNT
  episode 1
  mapnum 30
  mapname THUSTR_30
  mapnameimage CWILV29
  interpic INTERPIC
  music MAP30
  normalexitmapnum 31
  skytexture SKY3
  partime 180
  finaleflags TEXT CAST NOENTERING NONEXTLEVEL
  endflat RROCK17
  endtext T4TEXT
  endmusic Doom2_Victory
}

mapsetup TNT.MAP31
{
  gamemission TNT
  episode 1
  mapnum 31
  mapname THUSTR_31
  mapnameimage CWILV30
  interpic INTERPIC
  music MAP31
  normalexitmapnum 16
  secretexitmapnum 32
  skytexture SKY3
  partime 120
  finaleflags TEXT SECRETONLY
  endflat RROCK19
  endtext T6TEXT
  endmusic Doom2_Victory
}

mapsetup TNT.MAP32
{
  gamemission TNT
  episode 1
  mapnum 32
  mapname THUSTR_32
  mapnameimage CWILV31
  interpic INTERPIC
  music MAP32
  normalexitmapnum 16
  skytexture SKY3
  partime 30
}

/* Intermission Animations (InterAnims) */

imagepatchlist wianims000
{
  wia00000
  wia00001
  wia00002
}

interanim 000
{
  gamemission Doom
  episode 1
  animtype ALWAYS
  period 11
  patchlist wianims000
  x 224
  y 104
}

imagepatchlist wianims001
{
  wia00100
  wia00101
  wia00102
}

interanim 001
{
  gamemission Doom
  episode 1
  animtype ALWAYS
  period 11
  patchlist wianims001
  x 184
  y 160
}

imagepatchlist wianims002
{
  wia00200
  wia00201
  wia00202
}

interanim 002
{
  gamemission Doom
  episode 1
  animtype ALWAYS
  period 11
  patchlist wianims002
  x 112
  y 136
}

imagepatchlist wianims003
{
  wia00300
  wia00301
  wia00302
}

interanim 003
{
  gamemission Doom
  episode 1
  animtype ALWAYS
  period 11
  patchlist wianims003
  x 72
  y 112
}

imagepatchlist wianims004
{
  wia00400
  wia00401
  wia00402
}

interanim 004
{
  gamemission Doom
  episode 1
  animtype ALWAYS
  period 11
  patchlist wianims004
  x 88
  y 96
}

imagepatchlist wianims005
{
  wia00500
  wia00501
  wia00502
}

interanim 005
{
  gamemission Doom
  episode 1
  animtype ALWAYS
  period 11
  patchlist wianims005
  x 64
  y 48
}

imagepatchlist wianims006
{
  wia00600
  wia00601
  wia00602
}

interanim 006
{
  gamemission Doom
  episode 1
  animtype ALWAYS
  period 11
  patchlist wianims006
  x 192
  y 40
}

imagepatchlist wianims007
{
  wia00700
  wia00701
  wia00702
}

interanim 007
{
  gamemission Doom
  episode 1
  animtype ALWAYS
  period 11
  patchlist wianims007
  x 136
  y 16
}

imagepatchlist wianims008
{
  wia00800
  wia00801
  wia00802
}

interanim 008
{
  gamemission Doom
  episode 1
  animtype ALWAYS
  period 11
  patchlist wianims008
  x 80
  y 16
}

imagepatchlist wianims009
{
  wia00900
  wia00901
  wia00902
}

interanim 009
{
  gamemission Doom
  episode 1
  animtype ALWAYS
  period 11
  patchlist wianims009
  x 64
  y 24
}

imagepatchlist wianims100
{
  wia10000
}

interanim 100
{
  gamemission Doom
  episode 2
  animtype LEVEL
  period 11
  patchlist wianims100
  x 128
  y 136
  mapnum 1
}

imagepatchlist wianims101
{
  wia10100
}

interanim 101
{
  gamemission Doom
  episode 2
  animtype LEVEL
  period 11
  patchlist wianims101
  x 128
  y 136
  mapnum 2
}

imagepatchlist wianims102
{
  wia10200
}

interanim 102
{
  gamemission Doom
  episode 2
  animtype LEVEL
  period 11
  patchlist wianims102
  x 128
  y 136
  mapnum 3
}

imagepatchlist wianims103
{
  wia10300
}

interanim 103
{
  gamemission Doom
  episode 2
  animtype LEVEL
  period 11
  patchlist wianims103
  x 128
  y 136
  mapnum 4
}

imagepatchlist wianims104
{
  wia10400
}

interanim 104
{
  gamemission Doom
  episode 2
  animtype LEVEL
  period 11
  patchlist wianims104
  x 128
  y 136
  mapnum 5
}

imagepatchlist wianims105
{
  wia10500
}

interanim 105
{
  gamemission Doom
  episode 2
  animtype LEVEL
  period 11
  patchlist wianims105
  x 128
  y 136
  mapnum 6
}

imagepatchlist wianims106
{
  wia10600
}

interanim 106
{
  gamemission Doom
  episode 2
  animtype LEVEL
  period 11
  patchlist wianims106
  x 128
  y 136
  mapnum 7
}

imagepatchlist wianims107
{
  wia10700
  wia10701
  wia10702
}

interanim 107
{
  gamemission Doom
  episode 2
  animtype SINGLE
  period 11
  patchlist wianims107
  x 192
  y 144
  mapnum 8
}

imagepatchlist wianims108
{
  // MONDO HACK! HACK ALERT!
  wia10400
}

interanim 108
{
  gamemission Doom
  episode 2
  animtype LEVEL
  period 11
  patchlist wianims108
  x 128
  y 136
  mapnum 8
}

imagepatchlist wianims200
{
  wia20000
  wia20001
  wia20002
}

interanim 200
{
  gamemission Doom
  episode 3
  animtype ALWAYS
  period 11
  patchlist wianims200
  x 104
  y 168
}

imagepatchlist wianims201
{
  wia20100
  wia20101
  wia20102
}

interanim 201
{
  gamemission Doom
  episode 3
  animtype ALWAYS
  period 11
  patchlist wianims201
  x 40
  y 136
}

imagepatchlist wianims202
{
  wia20200
  wia20201
  wia20202
}

interanim 202
{
  gamemission Doom
  episode 3
  animtype ALWAYS
  period 11
  patchlist wianims202
  x 160
  y 96
}

imagepatchlist wianims203
{
  wia20300
  wia20301
  wia20302
}

interanim 203
{
  gamemission Doom
  episode 3
  animtype ALWAYS
  period 11
  patchlist wianims203
  x 104
  y 80
}

imagepatchlist wianims204
{
  wia20400
  wia20401
  wia20402
}

interanim 204
{
  gamemission Doom
  episode 3
  animtype ALWAYS
  period 11
  patchlist wianims204
  x 120
  y 32
}

imagepatchlist wianims205
{
  wia20500
  wia20501
  wia20502
}

interanim 205
{
  gamemission Doom
  episode 3
  animtype ALWAYS
  period 8
  patchlist wianims205
  x 40
  y 0
}

/* Intro Loops */

introloop shareware
{
  title TITLEPIC
  demo demo1
  page CREDIT
  demo demo2
  page HELP2
  demo demo3
}

introloop registered
{
  title TITLEPIC
  demo demo1
  page CREDIT
  demo demo2
  page CREDIT
  demo demo3
}

introloop commercial
{
  title TITLEPIC
  demo demo1
  page CREDIT
  demo demo2
  title TITLEPIC
  demo demo3
  demo demo4
}

introloop retail
{
  title TITLEPIC
  demo demo1
  page CREDIT
  demo demo2
  page CREDIT
  demo demo3
  demo demo4
}

introloop indetermined
{
  title TITLEPIC
  demo demo1
  page CREDIT
  demo demo2
  page HELP2
  demo demo3
  page CREDIT
  demo demo4
}

 

 

1 person likes this

Share this post


Link to post

After I got it working with falling back to the original code as default, then it's time to think about streamlining. The one dangerous thing here is that a change misses some sync-critical timing and the code is full of that stuff, some very easy to miss.

 

When I did the same thing for wi_stuff in ZDoom 12 years ago it was a lot easier, of course, because I could just toss out the convoluted garbage that was causing the problems. Here it's not that easy because there's a few very subtle differences, even between Doom1 and Doom2 that could easily get tossed out along if stuff got streamlined.

 

 

Share this post


Link to post
4 hours ago, fraggle said:

I'm confused by the original premise of the question. Vanilla ("vanilla true" in this context?) usually just means "uses only the features that are in vanilla". If MAPINFO isn't in vanilla then it shouldn't be surprising that "vanilla" ports don't support it. So what exactly do you mean? You mention PrBoom+ and Crispy Doom; are you talking about some category of ports that is midway between "vanilla" and "limit removing" and slightly more liberal about accepting new features?

Yes, I should have specified a bit more clearly. I didn't mean Chocolate Doom or other ports that try to be exactly like the original, more the limit removing and up. Though this does make me wonder about the possibility of a patch file in the vein of DEHACKED that would work for vanilla. Is that possible or do i just not know enough about how the source code works?

Share this post


Link to post
3 hours ago, Death Egg said:

Yes, I should have specified a bit more clearly. I didn't mean Chocolate Doom or other ports that try to be exactly like the original, more the limit removing and up. Though this does make me wonder about the possibility of a patch file in the vein of DEHACKED that would work for vanilla. Is that possible or do i just not know enough about how the source code works?

There's only a very limited set of things you can change with Dehacked - you can't use it to do arbitrary changes to the executable. The most you might do is something that could convert certain bits of MAPINFO into dehacked patches (level names, for example), but it's probably not worth it.

Share this post


Link to post

I think not worrying about targeting limit-removing makes sense. Limit removing wads are still essentially vanilla in principle, so I think everyone would expect them to follow the traditional level format.

 

For Boom, MBF and upwards though, it makes perfect sense to try to include.

Share this post


Link to post
5 hours ago, fraggle said:

There's only a very limited set of things you can change with Dehacked - you can't use it to do arbitrary changes to the executable.

 

However, someone could write a more flexible doom-binary-patcher with a well defined input language that could do more than Dehacked. Not a great deal more though, there's only so much you can achieve with this approach.

 

And if someone did write such a thing that worked with the vanilla exes...

Share this post


Link to post

I will add this UMAPINFO to Eternity if PrBoom+ adopts it. If only GZDoom adds it, it will be of a lesser priority.

 

On 19.04.2017 at 8:13 AM, Arctangent said:

So, you're a strong supporter for 100% vanilla Doom 2 map sets being limited to only ZDoom and Eternity, due to using map progression that isn't the standard 32 maps with secret exits only being available in MAP15 and MAP31?

By the time you make your mod require ZDoom or Eternity, you should be free to use their features. Enhance your maps the way you wanted but couldn't just with vanilla. You shouldn't limit the new features just to ?MAPINFO.

Share this post


Link to post
25 minutes ago, printz said:

I will add this UMAPINFO to Eternity if PrBoom+ adopts it. If only GZDoom adds it, it will be of a lesser priority.

 

If that was the case it would be pointless. Which is why I am actually developing the feature directly on the PrBoom source. We'll see where it goes.

 

Share this post


Link to post
8 hours ago, printz said:

By the time you make your mod require ZDoom or Eternity, you should be free to use their features. Enhance your maps the way you wanted but couldn't just with vanilla. You shouldn't limit the new features just to ?MAPINFO.

That doesn't really do much if the maps are already made.

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