Menu

Tree [94cb51] master /
 History

HTTPS access


File Date Author Commit
 FreeDoom 2020-04-18 Sam Trenholme Sam Trenholme [03cc02] ObHack-FreeDoom-3.6.2 released
 ObHack-engine-697 2020-04-17 Sam Trenholme Sam Trenholme [cf4f93] Update MAP24 to have mega and plasma gun
 Win32-binary 2020-02-12 Sam Trenholme Sam Trenholme [6fea11] Win32-binary: Update README, make README.md
 deng-1.8.6 2020-03-03 Sam Trenholme Sam Trenholme [7419a7] Add Doomsday 1.8.6 installer, since it’s no lon...
 fltk-1.1.9 2020-02-12 Sam Trenholme Sam Trenholme [5a2431] Chmod 755 fltk/configure
 glbsp-2.24-source 2020-02-08 Sam Trenholme Sam Trenholme [056296] Remove TIME from glBsp so .wad can be determini...
 midi3mus 2020-02-28 Sam Trenholme Sam Trenholme [b50766] README.md: Explain what a MIDI is
 tests 2020-04-17 Sam Trenholme Sam Trenholme [548968] Add 1FreeDoom1-tiny.test.sh to make sure tiny m...
 wad2map 2020-04-20 Sam Trenholme Sam Trenholme [1dd634] Add wad2map tool
 wad2pdf_UVonly_hack 2020-02-28 Sam Trenholme Sam Trenholme [b776fa] wad2pdf: Remove .pyc files
 zlib-1.2.3 2020-02-12 Sam Trenholme Sam Trenholme [cb5cc6] zlib: Fix perms on configure
 CODE_OF_CONDUCT.md 2018-11-11 Sam Trenholme Sam Trenholme [b20dc8] I pledge to follow the Contributor Covenant in ...
 HOWTO.md 2020-03-08 Sam Trenholme Sam Trenholme [3d7607] HOWTO.md: Typo fix
 LICENSE 2015-06-21 Sam Trenholme Sam Trenholme [25d2dd] zlib and Lua use different, GPL-compatible lice...
 README.md 2020-04-20 Sam Trenholme Sam Trenholme [94cb51] README.md: Link to https://sourceforge.net/p/ob...
 RG32SUMS.TXT 2020-03-01 Sam Trenholme Sam Trenholme [f29b50] Update RG32SUMS.TXT
 compile.CentOS7.sh 2020-02-12 Sam Trenholme Sam Trenholme [301892] FLTK: Use built-in PNG
 compile.MinGW.sh 2020-02-12 Sam Trenholme Sam Trenholme [5f41f5] Add shell script to compile in Win32

Read Me

What is here

There are several things in this GitHub package:

  • ObHack, a fork of Oblige 2
  • Doomsday 1.8.6, whose source code I host in order to maintain GPL compliance
  • midi3mus, a package which converts MIDI files in to MUS files. I used this to fix some problems Doomsday 1.8.6 had with FreeDoom’s newer MIDI files; the MIDIs would not always start until I converted them in to MUS files.
  • A fork of wad2pdf which is here so I can make PDFs of the files, only showing items which show up when playing single player maps at Ultra Violence difficulty.
  • FLTK, GlBSP, and Zlib, which are needed to compile the ObHack GUI (GlBSP is also used by wad2pdf to generate pdf files)
  • ObHack itself, which has both the C++ source code and the LUA scripts to randomly make levels
  • “tests” which I run to ensure ObHack is correctly making levels and correctly generating pseudo-random numbers
  • Win32-binary, which has a special debug version of ObHack
  • FreeDoom, which has “ObHack FreeDoom”, my fork of FreeDoom

ObHack: A random map generator for Doom

ObHack is a random map generator for Doom. This was the state of the art
in random Doom map generation back in 2007; these days, newer generators
are available here:

The home page for this generator is here:

I should, of course, mention SLIGE, the very first random map generator
for Doom:

How to get this code

This code is available at https://samiam.org/slump and is also available
as a Git checkout at GitHub,
GitLab,
Bitbucket,
SourceForge, and
SourceHut.

Why this code is here

The reason for this branch is to make a small, compact random map
generator for Doom which I can put on a tiny 50-megabyte hockey-rink
shaped business card CD. This allows me to have consistent a 32-map
megawad without taking up too much space, and to generate other
maps as desired.

Running this code

On Windows systems, one can run this code by simply entering the
ObHack-engine-697 directory and running the supplied ObHack.exe
file.

On other operating systems, read the section “How to
compile
” below.

What this is

ObHack is my name for some modifications Fritz and myself have made
to Oblige, a random map generator for the original Doom, Doom 2, and
Heretic. It is name thusly because it is a hacked Oblige, and as a tribute
to the ObHacks posted to the once-great Usenet newsgroup alt.hackers.

ObHack is a fork of version 2 of Oblige (Oblige 0.81-0.97). It has the
following features that Oblige2 does not have:

  • Real secret areas that take work to find
  • Improved random number generator which allows arbitrary English or
    Spanish text to be the seed, resulting in a nearly infinite number of
    possible seeds
  • New modes: Single Player + Deathmatch, Deathmatch without exits, and
    Carnage
  • Progressive level size: Levels get bigger as one gets to higher levels
    in the wad
  • Tiny and small level sizes
  • Option to have swarms of mosters
  • Choice of player starting weapon
  • More texture packs, including contributions from Mr. Chris
  • Deathmatch starts and extra deathmatch-only weapons and ammo in
    single player maps
  • etc.

The options

Once the ObHack program is open, a window with various options appears.

Random seed

This determines how the maps look and are layed out. In theory, a given
random seed generates the same maps. In practice, about 5% of the maps
are non-deterministic and will slightly vary, even when generated with
the same seed. The seed always defaults to 1FreeDoom1, a seed which
does generate 100% deterministic maps; it can be changed by clicking on
“New Seed”, or by typing in a new seed in the “Random seed” box.

Game

The game determines which particular game we make random maps for:

  • Doom 2: Doom 2
  • FreeDoom: Doom 2 with fewer possible monsters (since some monsters
    do not look as good in FreeDoom)

Note that Hexen is not available. It is available in Oblige 0.97.

Note that Doom 1 and Heretic are not available. They are available in
the ObHack-8-Final version of this code.

Port

This pull down does not have any options.

Length

  • Single Level: One level
  • One Episode: A smaller megawad of nine or so levels
  • Full Game: A full megawad with well over two dozen levels

Mode

  • Single Player: While this mode is optimized for making single player
    maps, it is possible to play Deathmatch with these maps; Deathmatch
    starts are made, and more weapons and ammo are available when these
    maps are played in Deathmatch mode.
  • Co-op: Use this mode for playing Co-op networked games; none of the
    other modes make suitable co-cp maps.
  • Deathmatch: This makes special deathmatch maps which do not have
    monsters, have a lot of weapons, and have more connectivity between
    rooms than single player maps.
  • SP + DM: This is a compromise between making a single player map and
    making a deathmatch map. All locked doors can be opened by keys; the
    only “treasures” to be found on the map are weapons, and the maps tend
    to have more powerful weapons than pure single player maps. There are
    multiple deathmatch starts, and the starts are clearly marked on the
    map. On the other hand, the maps still have the hub-and-spoke
    “puzzle” layout of single player maps.
  • Carnage: These maps have the same architecture as the single player
    maps generated with the same seed, but the maps have more monsters, more
    weapons, more ammo, but less health than the corresponding Single Player
    maps. It makes for a more intense game but one with less strategy than
    a standard Single Player game.
  • DM (No Exit): This generates pure deathmatch maps which have no exit.
    This is for ports of Doom where the deathmatch level is updated after
    a given number of frags or a time limit is reached.

Note that the Capture the Flag mode is no longer available. For people
who want CTF support, use the ObHack-8-Final version of ObHack.

Adjustments

  • Level size: How big the levels are. “Progressive” means that initial
    levels are small, but they get bigger as the player progresses through
    the megawad.
  • Steepness: How much difference in altitude there is in the map.
  • Monsters (“Players” in Deathmatch mode): How many monsters are on the map.
    When playing a single player (or Carnage) map in Deathmatch mode, this
    also determines how many weapons and how much extra ammo the map has.
  • Puzzles: How often the player will need to find a key or switch in order
    to open a door when playing a map. This determines how many weapons
    there are in pure deathmatch mode.
  • Outdoors: How often the map is outdoors. “More” means that the player
    will usually start off a level outdoors.
  • Switches: If set to “keys only”, there will be no puzzles where the player
    needs to find a switch before opening a door. If set to “switches only”,
    there will be no keys on the map, only switches to open door. Otherwise,
    the map will have both types of puzzles. Note that this has little effect
    on “Single Player and Deathmatch” levels, and no effect on “Deathmatch”
    levels.
  • Health: How much health the map has. “None” is an option geared for
    playing maps in Deathmatch mode, when it is not desirable to allow the
    player to heal after being damaged.
  • Ammo: How much ammo we let weapons have on maps.
  • Start weapon: We can allow the player to start off with a better weapon
    than a pistol. Basic is a shotgun in Doom games, and a crossbow in
    Heretic. Hardcore is a rocket launcher in Doom games, and a Phoenix Rod
    in Heretic.

The other buttons.

“Build” will build the map. “About” describes the game. “Quit” causes the
ObHack level generator window to close.

The ObHack 8 branch

From 2009 until 2017, a lot of work was done on ObHack, including
monster traps, variable room sizes, boss arenas, Blasphemer support,
basic Capture the Flag support, etc.

The ObHack 8 code is still here, in the Git tag ObHack-8-final.
To get this code, go to this URL:

https://github.com/samboy/ObHack/releases/tag/ObHack-8-final

Or, if using Git, type in git checkout ObHack-8-final

Determinism: About 95% there

ObHack, has, until recently, had issues with making completely different
maps when given the same parameters. I have updated the code to remove
about 95% of the problems.

If I run the ObHack program with the same seed and parameters, I will
sometimes get a given .wad file; multiple invocations will sometimes
give me a file with the same size and exact same contents.

The code which makes the binary .wad file from a given generated map
is non-deterministic; I have verified this by having the code instead
generate .txt files (some old debug code which Andrew put there) and
verify that all of the files are the same with a given seed.

In about 5% of the generated maps, some non-deterministic code is run.
It is too deep of a “rabbit hole” for me to figure out exactly why this
happens, so I have instead set it up so that, for MAP06, we change
the numbers generated by the random number generator (by adding 1234
“empty” runs of the generator) so that the 32-map megawads generated
for Doom2 (actually, FreeDoom) maps are the same if the seed is either
1FreeDoom1 or 2FreeDoom1 and the default ObHack parameters are
used.

How to compile

These are the files needed to make the Win32 binary of ObHack. To compile,
you will need to install both MinGW-3.1.0-1 and MSYS-1.0.10. Once you do
that, do something like this:

export FLAGS=-Os
export CFLAGS=-Os
cd fltk-1.1.9
./configure
make
cd ..
cd zlib-1.2.3
./configure
make
cd ..
cd glbsp-2.24-source
# You may have to edit the makefile
make
cd ..
cd ObHack-engine-*
cd gui
# You may have to edit the Makefile
make

MinGW and MSYS install directions are here:

http://samiam.org/blog/old-200903-mingw-310-1-last-real-mingw-release.html

Note that that version of MinGW does not run in Windows 10.