
WISH-LIST
=========

*  get more games working (Heretic, Hexen etc)

*  support for Traps, Cages, Secrets, Powerups

*  add in more scenery: lamps, computers etc

*  better monster selection


----------------------------------------------------------------
  OTHER GAMES
----------------------------------------------------------------

+  Duke Nukem 3D
+  Quake II

-  HacX
-  Hexen II
-  Chex Quest 1, 2, 3

?  Dark Forces
?  Strife
?  Half-Life


----------------------------------------------------------------
  LEVEL STUFF
----------------------------------------------------------------

Facades:
  -  would be nice to "smooth" any odd-one-outs

  -  ability to ensure both inner/outer are the same


Porches:
  -  this is 3 or more seeds around a door from outside->inside
     with a non-sky ceiling and some pillars and a raised floor.


Natural areas:
  -  height changes?

  -  better bordering with outdoor areas, how??

  -  support last layer being a deep liquid or even solid,
     this requires monster/pickup spots to be done later

  -  windows facing landscapes : clear the cave in front

  -  MIDVINE sometimes used at cave transitions
     (probably need a new prefab for this)


Lighting:
  -  support w_face.light (maybe even have 'light' in MATERIALS ?)


Ceilings:
  - put several small light fittings/sky holes with
    simple patterns (e.g. inner 2x2 seeds, or outer corners)


Pickups:
  -  add some powerups


Planner:
-  review / improve 'emergency' connections


Buldings:
  - can have separate textures for 'interior' and 'exterior' walls.


Windows:
  - better patterns:
    (1) flank door mode
    (2) every second seed mode

  - put in indoor children rooms which don't connect to parent


Hallways:
  - rarely and big room (3+ conn) : make a maze


Ceilings:
  + or a criss-cross of beams, especially with pillars or
    low opposite sides.  [NOTE: can mess up lifts!]

  - mega sky holes (two in one, esp. outer has F_SKY1)


Pictures:
  - implement "billboards", pictures which jut down from the
    ceiling (above doors and low periphs).


Nicety:
  - mark end of big tables with a comment (like D1_WALL_PREFABS)


Miscellaneous:
  - Can disable the custom levels
  - More than one theme per episode.

  - rarity for bfg10k and railgun for Skulltag


Possible Options:
-  glBSP section:
   -  more accurate nodes (slower)
   -  verbose log messages
   -  pack sidedefs


Hallway Theming:
  Wood# (Namely Wood1, Wood3 and Wood5...Wood4 is the one with skulls on it
  and might look silly), Woodmet1, Skin2, GSTONE1/SP_HOT1 and Skinmet#
  textures would fit well in the HELL theme (Note Woodmet# textures are Doom2
  only, everything else works in both games)

  PANCASE2 would fit well for Doom2 Urban hallways.


----------------------------------------------------------------
  GUI and C++ CODE
----------------------------------------------------------------

-  on serious script errors: remember it, so that we
   don't try calling into LUA to write the config.


SKY GENERATOR:

-  background part: GRADIENT or CLOUDS or STARS

   GRADIENT params: colors
   CLOUD param: fracdim, powscale, squish, colors
   STARS param: powscale, cutoff, colors

-  foreground part: NONE or MOUNTAINS or BUILDINGS

   MOUNTAINS params: min_h, max_h, fracdim, powscale, colors
   BUILDINGS params: min_h, max_h, gap_size, colors, light_cols


----------------------------------------------------------------
  DOOM and DOOM II
----------------------------------------------------------------

+  support MAPINFO lumps (especially for ZDoom ports).

-  support for the DECORATE lump

-  better starting scenarios (e.g. fix raising_starts)

-  MAP32: find and kill all the Keens to open the door to the exit.
          perhaps use Psychedelic theme and a lower qty Crazy mode.

-  give sky_fence linedefs the 'never draw' flag

-  make light level of windows (esp. outdoor -> outdoor)
   slightly lower than surrounds.

-  generate episode names (M_EPI# etc).

-  build our own REJECT lump (use vis info like Quake)


----------------------------------------------------------------
  FINAL DOOM
----------------------------------------------------------------

-  TNT Evilution textures that have been changed:
     BLODGR1..4  SLADRIP1..3  SW1GSTON    SW1SKULL

-  Plutonia textures that have been changed:
     DBRAIN1..4  FIREBLU1..2  SW1SKULL

-  Plutonia has 'WFALL1..4' textures for water


----------------------------------------------------------------
  HERETIC
----------------------------------------------------------------

-  don't build Blaze doors into maps.

-  monsters: not mixed enough (too repetitive), no bosses.

-  weapons: firemace no good for SP/COOP ??

Sam's suggestions:
  for Heretic caves should be rare in E1, common in E2, and somewhat common
  in E3. I would, if going along with the “Egypt Sand” theme I made for
  ObHack’s E4 in Heretic, make caverns about as common as they are in E3.

  I would give E2 caverns pretty much the same theme as they have in ObHack;
  E3 should be pretty much like E1, but I would make the occasional cavern in
  E3 be very watery (water flowing down walls and the floor being full of
  pools), or be like some areas in the original E3M7.


----------------------------------------------------------------
  HEXEN
----------------------------------------------------------------

-  get it working again (different WAD formats, args[], etc)

+  need exit teleporter in final Hub.

-  put 'fighter only' bit on fighter's weapons, etc..

+  bug report: some doors close and never open.

+  rework teleporter gates (make them bi-directional).

+  fix key usage (REQUIRE both to get to boss level).


----------------------------------------------------------------
  QUAKE
----------------------------------------------------------------

+  better miptex handling:
   -  only copy _used_ textures into the MipTex lump
   -  support multiple WD2 files : gui.quake_add_textures
   -  create OBLIGE logos : gui.quake_make_logo()

++ perform visibility

++ perform lighting
   (sky vector = '1 2 4')

+  liquid areas

+  support the Boss maps (next map = "start")
     E1M7 : get rune, electrocute Chthon
     E2M6 : wood floor, funky bridge, kill vores to get rune
     E3M6 : castley, lavay, teleport-in fiend
     e4M7 : blue maze, spawn, kill vores to get rune

-  better exits

-  intermission camera (only need 1 -- user won't replay level)
     "classname" "info_intermission"
     "mangle"    "pitch roll yaw"  (pitch often 20, yaw 0)

-  nail shooters FTW

-  create faces from stacked brushes behind a gap (cf. oa_dm7)

-  Option to create _debugging_ MAP file

-  Option for shrinking textures to 32x32 (scaled in-map)
   which would only require 1/4 of the lightmap space
   (and hence less likely to run out of it)

-  QSAVETEX: verify the POP file


----------------------------------------------------------------
  QUAKE II
----------------------------------------------------------------

-  create oblige logos (.wal entries)

-  need to store wall brushes into a big list (qLeaf_c)
   and "split" them with Split_XY (if purely on one side,
   move to that side, otherwise keep in both sides).

   when get to solid wall leaf, keep the ones that match
   that wall (i.e. not completely in front of wall).

?  use cluster=-1 for SOLID leafs

+  merge Q#_CreateEntities into a common function

-  dface2_t == dface_t, move into common ??


----------------------------------------------------------------
  DUKE NUKEM 3D
----------------------------------------------------------------

!  exit buttons

!  Oblige logos: create 'TILES020.ART' lump

+  monsters
+  weapons
+  health and ammo

+  working doors
+  keys and switches

-  fake 3D bridges (created via sprites)


----------------------------------------------------------------
  WOLF 3D
----------------------------------------------------------------

-  get it working (tiler.lua)

+  push-walls for secret quests!
+  secret elevators
+  bosses!

-  decide_monster : skills are "tiered"
-  health/ammo : no skills! -- use medium one
-  place_items : never where monsters are!
-  create rooms with 'endgame' object.

+  ensure limits are enforced:
   - MAXACTORS = 150  (remove actors at random)
   - MAXSTATS  = 400  (remove statics at random)
   - MAXDOORS  = 64   (remove unneeded doors at random)

-  patrolling monsters (need to create path with arrows).
-  secret levels (full of treasure)
-  something interesting in middle of big rooms.
-  elevator "entry" in first room.


----------------------------------------------------------------
  MISCELLANEOUS
----------------------------------------------------------------

Secrets:

-  fix battle simulator to ignore stuff got in secrets
   (push state onto stack, pop afterwards).

-  different item probs, e.g. invuln & berserk are good


Theme system:

-  Room types:

   (a) storage   (crates, barrels)
   (b) quarters  (tables, chairs, beds)
   (c) bathroom
   (d) computer
   (e) library

   (f) armoury | supplies
   (g) processing plant (machines)
   (h) torture  (wolf3d/SOD)


Monsters:
  +  add guard monsters first, seeds around the purpose
     (or the weapon).

  +  "monster map" :
     (1) select 1-4 types of monster to use in room (palette)
         (and a pref for each one)

         (a) palette might not include guard monster
             (bump chance way down)

         (b) from player's current weapons determine a 'firepower'
             value (average of classes in Hexen).
             This is roughly how much damage can be done per sec.

             Hence we know how long each kind of monster would
             take to kill.  TOO LONG = skip monster,
             TOO SHORT = skip or bump chance way down.

  +  once we have the monster map, all we need then is some
     idea of QUANTITIES.

     +  the skill level controls how many monsters to add.
        Each monster is always present in "hard" and may be
        omitted for lower skills.  Maybe: medium keep 66%,
        easy keep 33%.  (always keep at least one).

     +  the GUI 'Monsters' setting not only controls how many
        monsters, but also affects difficulty, though quantity
        is more significant than the difficulty adjustment.

  #  decide level-wide monster palette (no monsters are used
     which are not in this palette).  Could save big monsters
     (arach, mancubus) for later levels and omit small ones
     (esp. pistol zombie).  Perhaps have a palette for each
     usage kind (free-range, guard, trap, cage) ??

  #  add some monsters
  -  cages & ledges
  -  monster closets
  -  pop-ups 
  -  teleport-in
  -  facing entry door [blaze D1]

++  put in some Cyberdemons or Spider Masterminds

-  at each room, pick 2-3 (rarer: 1,4) monster types
   then decide how many of each one (for each skill).

-  monster adjustment: don't just increase toughness, actually
   create _more_ monsters.

-  IDEA: treat groups of rooms (esp: multi starts and forked
         paths) as a SINGLE BATTLE ARENA.

-  cage monsters: don't put hitscan snipers up really high.


----------------------------------------------------------------
  PIPE DREAMS
----------------------------------------------------------------

+  better global architecture

+  teleporters!

+  make Oblige easier to mod.

-  bridges (activate by a switch)

-  light up levels (a la quake).

-  exit via teleporter pad or holes in floor

-  improved use of liquids.

-  "Horror" mode: fewer but tougher monsters, fewer ammo, darker levels.

-  a mod for Eternal III

-  Rooms that lock you in and you have to find the switch on
   the other side of the room to get out.  All "normal" exits
   would be closed off by a line trigger near the entry way.

-  Pop-up Traps
   you make a sector, lower it enough so monsters cannot see
   the player but are facing him when it springs. The trap walls have
   no lower texture and you set the trigger line to action 19 ( W1
   floor lower to highest floor) and you set the trap monsters deaf so
   they aren't awakened by player gunshots.

   When the player trips the linedef, the floors instantly pop up to
   the nearest floor height without the rising delay of some other
   linedef actions. Another thing is to make sure the line that
   triggers the trap can't be bypassed and thus the player can get
   stuck in the hole if he falls in.

-  Surprise Lifts:
   It is a hallway/room section that looks normal but when the player
   crosses the Lift-Lower-Wait-Rise linedef, it lowers to surprise the
   player with monsters on one or both sides of the lift.

-  Dead/gibbed player corpses sprinkled around on each level (Just
   like Doom episode 1) with the chance of a weapon near their
   remains (Shotgun 35%, chaingun 30%, Supershot 15%, rocket
   launcher 15% and plasmagun 5%?)? Of course the weapon placement
   by the body is at a chance (15-20% chance?)

-  Type of boss battles JohnnyRancid would like to see:
      20+ revenants.
      2-5 arch viles.
      5-10 pain elementals
      2 cyberdemons.
      20+ hell barons or hell knights.
      20+ cacodemons.
      5-15 mancubi
      5-15 arachnatrons

-  CTF maps (boomctf) :
       5130 = "Blue flag";
       5131 = "Red flag";
       5080 = "Blue Start"      
       5081 = "Red Start"


----------------------------------------------------------------
  IDEAS AND BRAINSTORMS
----------------------------------------------------------------

-  module help / explanations ?? (appear above the options)

-  CSG: clipping rectangles (typically a room)

-  friendly monsters

?? one-way routes ??
   -  for example: at along:3 fall-off -> along:4
      BUT... how to get back to along:3 ??
      WITHOUT creating an alternative path?
      ANSWER: use another one-way connection

   - One way connections:
     (a) fall-offs
     (b) teleporters
     (c) doors that only open from one side (esp. via a switch)
     (d) lifts that go up (or down) into a hole
         (activated by a switch only on one side).

-  have a table listing a quantized HSV for each texture/flat
   and make aesthetic decisions using it.


>>>  a segment with same front and back ????

>>>  AssignBrushes: double checking using f/b_sides


SKIN TABLE FIELDS

1) use a plain word for the main part of something.

   Examples: 'wall', 'floor', 'side', 'switch',
             'beam', 'trim',  'base', 'door'.

2) the '_f' suffix on the main word can be used to provide
   a different floor or ceiling material (when the main word
   refers to the side texture).

3) the '_t' suffix can provide a different side texture
   when the main word refers to a floor or ceiling.

4) the '_c' suffix should NOT be used for normal DOOM,
   it is reserved for setting the ceiling material for
   rare cases when it could be different from the floor
   material -- e.g. in a QUAKE prefab.

5) the '_ox' '_oy' '_peg' suffixes provide x_offset,
   y_offset and pegging values.  When pegging is true,
   an absent y_offset value will be set to 0.

6) the '_w' '_h' '_d' suffixes are reserved for setting
   width / height (vertical) / depth values.


NAME GENERATOR

-  GUI SIDE:
   -  BOOM: DEHACKED lump   -- comments use '#'
            [STRINGS] section
            
            gui.property("bex_string", "HUSTR_%d = %s")

            (also: HUSTR_ExMy, PHUSTR_%d, THUSTR_%d)

   -  EDGE: DDFLANG lump    -- comments use '//'
            [ENGLISH] section

            gui.property("ddf_string", "Map01Desc=\"%s\";")

            (also: ExMyDesc="%s")

   -  Doomsday:  DD_DEFNS lump  -- comments use '#'
              
              Map Info
              {
                ID = "MAP01";
                Name = "Blah Blah";
              }

   -  Eternity:  EMAPINFO lump  -- comments use '#'

              [MAP01]
              levelname = Blah Blah
              music = xxxx
              creator = Oblige 3.xx
              skyname = SKY3

   -  ZDOOM / HEXEN: MAPINFO lump   -- comments use ';' 

             gui.mapinfo_map(lump, description)
             gui.mapinfo_property("cluster", "1")

             LIMIT = 31 letters

   -  QUAKE 1/2: stored in 'worldspawn' entity

             gui.property("level_desc", "%s") --> 'message' field

             LIMIT = 39 letters

-  WILVxx and CWILVxx creation: need an API!


MUSIC RE-ORDERING

   *  Doom 1: shuffle each episode

   *  Doom 2: if one episode (or less), pick random tracks and
              ensure that no two tracks have the same three-letter
              prefix.

   *  Doom 2, full game: shuffle tracks, loop a few times looking
                         for repeats (same three-letter prefix in a
                         row) and move one to random spot.

   -  BOOM, Eternity: [MUSIC] section in BEX

          [MUSIC]
          ROMERO = RUNNIN
          RUNNIN = STALKS
          STALKS = ROMERO

   -  Eternity native: 'music' setting in EMAPINFO

   -  EDGE native:  DDFPLAY lump:
   
          <PLAYLISTS>
          [01]
          MUSICINFO=MUS:LUMP:"D_RUNNIN";

   -  ZDoom : via MAPINFO: music D_RUNNING


THEME SELECTION

(a) Each level has a THEME, e.g. "Tech"

(b) User can select what theme to use ---> case closed

(c) For "mixed" select a random theme, bearing in mind:
    (i) secret levels can choose something whacky
    (ii) One-Episode: use 'epi_prob', group same themes together
    (iii) Full-Game: prefer episodes to have whole theme
                     and prefer theme to match sky


EXTRA GRAPHICS

   { "WALL52_X", "WALL53_1" },  // Doom    : CEMENT1,  CEMENT2
   { "WALL00",   "WALL42"   },  // Heretic : GRSKULL2, CHAINSD
   { "W_320",    "W_321"    }   // Hexen   : BRASS3,   BRASS4

   static const char *ext_patches[] =
   {
     "W74A_1",   "W74A_2", "W74B_1",         // FIREMAGx (water)
     "WALL64_2", "W64B_1", "W64B_2",         // ROCKREDx (lava)
     "RP2_1",    "RP2_2",  "RP2_3", "RP2_4", // BLODRIPx (blood)
     "TP5_1",    "TP5_2",  "TP5_3", "TP5_4", // BLODGRx  (nukage)

     NULL // end marker
   }



Room Fitting Out
----------------

-  can_fab_list: do preliminary size check (e.g. min/max)

-  Junk sides
   (f) sometimes allow one gap for a connection
   (g) ensure floor_fill works OK
   (h) use in rooms with children (no touching them)

-  IDEA: junk a side with a connection, and the little "bridge"
         seed can become a stairway.

-  BUG: lowering bars can bypass-able

-  ability to use patterns with heights both HIGHER and LOWER
   than the '.' entry connection.  (maybe: height=-1 in subs)

- ceilings:
  - big room with no sky neighbours: have a huge sky hole



Stairwells: more steps to ensure wall lengths <= 128 units
            --> SEED_SIZE * max(sx_span, sy_span) / 128

Quests
  - sometimes lock another connection (ESP: symmetry)
    with the same lock as one we just added
    [ESP: when new lock goes to leaf or semi-leaf]

CONNECT:  for TC (etc) patterns, make the ones that branch at
          room corners less likely (i.e. prefer 1 or 2 seeds
          away from corner, though it depends on room size).

HEIGHTS: prevent any room from having more than 4 heights
         [tiny rooms: no more than 2]


HEXEN lua: gui.property("hexen_format", "true")

SPEAR lua: gui.property("file_ext", "SOD")

EDGE: gui.property("solid_exfloor", 400)
      gui.property("liquid_exfloor", 406)
      gui.property("thing_exfloor_flags", "true")

LEGACY: gui.property("solid_exfloor", 281)
        gui.property("liquid_exfloor", 280)  -- 301



DOOM ENTITY PROPS:
  angle
  options
  tid
  special
  args


QUAKE1 ENTITY PROPS:
  light
  spawnflags
  target
  targetname
  speed
  next stop


General:

-  put important constants/tables into defs.lua



 ____________________
|KEY:                |
|    #  completed    |
|    -  plain item   |
|    +  important    |
|    >> in progress  |
|    ?? not sure     |
|____________________|

