graphics: Add kerning for text generator.

Adjust character positions so that some pairs of characters can fit
more closely together.
graphics: Fix textgen with Python 2.

Previous fix for Python 3 broke the script under Python 2.
Double Impact

Import maps from the 2011-Cacoward-winning episode Double Impact, as
donated by its authors, Ralphis and RottKing. The intention is that
these are used as Freedoom's episode 4.

========================================================================

Title                   : Double Impact
Filename                : DBIMPACT.WAD
Release date            : 03/30/2011
Author                  : RottKing & Ralphis
Email Address           : ralphis@unidoom.org rottking@sbcglobal.net

Other Files By Author   : Unidoom Deathmatch 1, Unidoom Deathmatch 2,
                          Unidoom Deathmatch 3, Unidoom Deathmatch X,
                          Odamex CTF 1

Misc. Author Info       : Visit us at http://www.unidoom.org
                          and #unidoom on irc.quakenet.org!

Description             : A nine map episode 1 replacement.

Additional Credits to   : infurnus for the sky texture,
                          esselfortium for the titlepic,
                          and dewww, st.alfonzo, NaturalTvventy,
                          Xenaero, glortho, joshsmith, and whiteboy567
                          for helping out with play testing.

========================================================================

* What is included *

========================================================================

New levels              : 9
Sounds                  : No
Music                   : Yes
Graphics                : Yes
Dehacked/BEX Patch      : Yes
Demos                   : Yes
Other                   : Yes
Other files required    : No

* Play Information *

Game                    : Ultimate DOOM
Single Player           : Yes
Cooperative 2-4 Player  : Yes
Deathmatch 2-4 Player   : Yes
Other game styles       : None
Difficulty Settings     : Yes

* Construction *

Build Time              : About a year and a half.
Editor(s) used          : Doombuilder, Wintex, XWE, Slumped
Known Bugs              : None
May Not Run With...     : doom.exe.
                          Requires at least a limit removing engine.

========================================================================

* Level Information *

========================================================================

----------

* Copyright / Permissions *

Authors MAY use the contents of this file as a base for
modification or reuse.

You MAY distribute this file, provided you include this text file with
no modifications.  You may distribute this file in any electronic
format (BBS, diskette, CD, etc.) as long as you include this file
intact.

You MAY edit and release any maps contained in the WAD as you wish under
the conditions that the original authors and Unidoom are credited.

* Where to get the file that this text file describes *

The Usual: ftp://archives.3dgamers.com/pub/idgames/ and mirrors
Web sites: http://www.unidoom.org

========================================================================

DW: http://www.doomworld.com/vb/post/1145592
Signed-off-by: Catoptromancy <catoptromancy@yahoo.com>
Signed-off-by: Simon Howard <fraggle@gmail.com>
Signed-off-by: RjY <rjy@users.sourceforge.net>
dbimpact: move to episode 4

This breaks the secret exit (needs to be on M2, not M3) and the ability
to exit M8 (which relies on E1M8's BossDeath lowering sectors tagged 666
to lowest when all _barons_ are dead - for E4M8, A_BossDeath has the
same effect but only when all _spiderdemons_ are dead)
dbimpact: switch M2 and M3 (fix secret exit)

The secret exit needs to be on E4M2 not E4M3. This is the simplest way
to achieve that, and in my view better than the alternative (disabling
the existing secret exit and grafting a new one into the other map)
dbimpact: avoid use of tag 666 on M8

There are four switches that all need to be pressed to activate the
finale of the map. In the original these would cause four barons to be
crushed, the final one causing several floors to lower. Since this use
of barons makes the map depend on the E1M8 slot, it needs reworking.

- Change the switches to raise floor to lowest adjacent ceiling types
  (thus creating an instant floor lowering)

- Near to each switch place lines that lower the former tag 666 floors
  to their _highest_ adjacent.

Thus these floors only lower when all four switches have been pressed
and all four control sectors have been lowered.

Obviously this could be done with voodoo doll scripts or using multiple
switches and the Boom passuse flag but since dbimpact was designed for
Doom complevel I did not want to risk making it require Boom complevel.

Make a couple of other adjustments to support this:

- The four switch-pressed indicators on either side of the exit door now
  unfortunately no longer start moving (they're not crushers)

- "Crack" the northwest demon face tower so there is a tiny invisible
  hole between the bright part and the small shadow on the corner.
  Otherwise lower to highest adjacent floor would not work as required.

- Also, make all control sectors invisible on the automap (after all,
  there is a computer map on this level)
levels: update e4 symlinks to point to dbimpact
levels: remove old e4m1/e4m2
text/dehacked: Double Impact map names, E4 episode title
levels: new E2M5 from Z0k

[ RjY: changes to submitted version:
- increase gap between pile of crates (sector 256 etc.) and nearby
  walls, to prevent player getting stuck
- set passuse flag on lines 75, 208, 288, and 1320 to stop them blocking
  doors (lines 72, 1348) from being opened
- move monster teleporters so monsters don't have to walk away from
  player to teleport, to prevent excessively long teleport times ]

DW: http://www.doomworld.com/vb/post/1221430
Signed-off-by: RjY <rjy@users.sourceforge.net>
levels: E2M5: fix monster teleporter

The trigger sector 94 lowers its floor to a height of 40; the adjacent
holding sector 100 has a height of 72, so if the imps don't catch the
lift as it passes, they get stuck and never teleport out.
textgen: Set level names from DEHACKED lump.

Use the DEHACKED lump as a source of truth for level names, and set
the textgen configuration accordingly. Make the current level names
in the DEHACKED lump upper case so that the current ExMy/MAPxy names
look correct.
textgen: Strip map number from level name graphics.

The level name shown in the automap should be in the form:
"ExMy: Level Name" but for the intermission screen graphics we just
want "Level Name". Strip the leading level name if it is present.
graphics/text: run ImageMagick only once per generated image

- factor out command line generation: a new function _make_command_line
  returns most of the command line for a transparent image rendering.

- Callers render_transparent_text and render_text append the output
  filename and extra imagemagick options to colour the background as
  needed. This means imagemagick is only called once per generated
  image, which makes the process considerably faster.

- This also works around a bug in the current version of imagemagick in
  Debian sid, which caused single-character graphics (e.g. winum*) to be
  generated with a black background.

DW: http://www.doomworld.com/vb/post/1221810
Acked-by: Simon Howard <fraggle@gmail.com>
Signed-off-by: RjY <rjy@users.sourceforge.net>
levels: E1M5 2013-12-15 update by Z0k

-moved an imp that was stuck on a console panel near of the swicht,
preveting the imp for moving futher.

-Size of the columns that hold tech pillar now are reduced, this for
preveting player getting stuck in middle of them

-Added 2 to 5 % damage to the acid pit of the tech pillars

-Added a new teleporter on the red key zone to reach the swicht that
open the door of the exit, this to help the player who dont know that
the teleporters where monsters come out are teleporters they can use. so
players can use both teleporters, one which is useful as shortcut to end
the level quickly and the other to keep the way of the level delevop

[ RjY: changes to submitted version:
  - remove spurious dehacked lump (cf. commit 618b444049)
  - set passuse flag on lines 1795, 1800, and 1806, so the lift can be
    operated from below, and the door opened from above ]

DW: http://www.doomworld.com/vb/post/1222853
Signed-off-by: RjY <rjy@users.sourceforge.net>
patches/textures: replacement E4 starry sky for Double Impact

Double Impact's original sky texture is derived from an image with
unknown copyright restrictions (see [1]). Construct a replacement from
an image of the globular cluster M80 from the Hubble Space Telescope
(Credits: NASA; public domain; sources [2] [3]) and a random starfield
image generated by ImageMagick (adapted from [4])

Note the original's "dark sky with bright shadow-casting light source"
effect which was built into the maps - this replacement is carefully
tuned to preserve that effect (as any improvement should also do).

[1] http://www.doomworld.com/vb/post/1222877
[2] http://en.wikipedia.org/wiki/File:A_Swarm_of_Ancient_Stars_-_GPN-2000-000930.jpg
[3] http://grin.hq.nasa.gov/ABSTRACTS/GPN-2000-000930.html
[4] http://www.imagemagick.org/Usage/advanced/#stars

Signed-off-by: RjY <rjy@users.sourceforge.net>
Merge branch 'double_impact'

Conflicts:
	graphics/text/config.py
	lumps/fraggle/freedoom.bex
graphics/text: set -colorize alpha channel blend percentage to zero

Give a fourth channel blend percentage of zero so that the alpha channel
of the default fill colour (fully opaque black) is ignored. This fixes
the blue menu titles (skill, episode etc.) having black backgrounds.

The use of -colorize here blends 100% of the default fill colour (black)
into one or more channels of a greyscale image. Mixing in 100% black is
equivalent to nullifying the channel by setting it to zero, e.g. red
text is achieved by mixing 100% black into the green and blue channels.

It turns out, when passed more than one value (to affect all channels by
that percentage equally), -colorize looks for _four_ separate channel
values (RGB and alpha). If fewer are given, the missing ones inherit the
blend percentage of the first channel (red).

For red and white there is no effect, as the red channel is left alone.
But blue blends 100% of the red channel (thus, unwittingly, the alpha
channel) of fully opaque black into the image, making it fully opaque...
colormaps: Generate colormaps programatically.

This replaces the statically generated colormaps with equivalent
colormap lumps that are generated by the colormap.py script (which now
has parameters to control the generated colormap).