26 December 2008

Aleph One 0.21.2

A bug fix release is available from http://source.bungie.org/get or

  • Added support for custom window sizes (by editing prefs file)
  • Fixed assertion failures when changing levels in net games
  • Restore the previously selected map when finishing a net game
  • Restore support for UTF-8 prefs / MML
  • Added a VSync checkbox in OpenGL

13 December 2008

Aleph One 0.21

Aleph One 0.21 is available from http://source.bungie.org/get/ or http://marathon.sourceforge.net/

Highlights of this release are screen resolution detection, level embedded Lua and MML, and bug fixes. This release is not network compatible with previous releases.

Full release notes are available here: http://sourceforge.net/project/shownotes.php?group_id=1997&release_id=647017

27 September 2008

Prelude in D-flat

Inspired by this drawing by irons.

Download (4.2 MB mp3)
Creative Commons License


Atque is a tool for merging/splitting Marathon maps and images files. Atque is available for Mac OS X, Windows, and Linux, and can split maps and extract resources to regular files on all platforms, eliminating the need for ResEdit.

For instance, chapter screens and terminal pictures are exported as BMP or JPEG; CLUTs are exported as Adobe Color Table files; and chapter sounds are exported as WAVs. TEXT resources are stored as editable text files, allowing, for example, easy find-and-replace operations. Once split, these files can be edited with commonly available editors, and then merged together again into a Unimap 2 map or images file.

Unimap 2 files use the Marathon 2 for Windows 95 style of resources, where each resource is stored as a chunk in a level of appropriate resource ID in the wadfile. Some advantages over the old MacBinary Unimap format:
  • Can be opened directly with Forge, to view/export levels
  • No 16 MB limit on stored resources
  • Removes dependence on the classic Mac OS utility ResEdit
There are a couple minor drawbacks:
  • There is only one name per resource ID in Unimap 2, whereas Unimap allowed storing a name for each resource type/ID pair
  • Aleph One 0.20.3 (9/13) is required to view Unimap 2 chapter screens / terminal pictures
In addition to resources, Atque handles levels, merged physics, merged shapes patches, and can compile and decompile terminal text. It has support for some terminal features Forge didn't, such as creating wide terminal pictures without resorting to the distasteful Cinemascope hack.

Atque is available under the GNU GPL. You can download Atque 1.0 binaries and source code from SourceForge: http://sourceforge.net/projects/igniferroque

A basic manual is available at

13 September 2008

Aleph One 0.20.3

A patch release of Aleph One is available from http://source.bungie.org/get or http://marathon.sourceforge.net/

This is a minor feature release of Aleph One, which includes Windows improvements and support for the Unimap 2 format. It is network compatible with Aleph One 0.20.x

  • Recognize PICT resources stored in M2-Win95 format (completes Unimap 2 support)
  • AlephOne.exe now requires a Pentium-class processor. Windows 2000 or higher is recommended.
  • Applied SDL patches from Tim Angus (from ioquake3) to allow DirectInput mouse control while OpenGL is active. If you have trouble with Vista, disable the "DirectDraw / DirectInput" option.
  • Added window manager icons in Linux and Windows
  • Added support for #STATIC terminal groups

22 July 2008

Aleph One 0.20.2

A patch release of Aleph One is available from
http://source.bungie.org/get or http://marathon.sourceforge.net/

This is a bug fix release, with some additional metaserver functionality as well. It is network compatible with 0.20.1.

  • Add a "Mute All Guest Chat" checkbox
  • Add a sound for private messages
  • Include Alex Bolton's carnage messages MML in Extras
Bug fixes:
  • Fix horizontally flipped textures in the OpenGL texture palette
  • Fix ignoring guests on the metaserver
  • Better platform export from .save level

07 July 2008

Aleph One 0.20.1

A patch release of Aleph One is available from http://source.bungie.org/get or http://marathon.sourceforge.net/

This is a bug fix release, with some additional Lua functionality as well. It is network compatible with 0.20, but it is recommended that all players upgrade to 0.20.1 for Lua compatibility.

01 July 2008

Visual Mode.lua

One of the big obstacles to third party map editor development is the reliance of many map makers on Forge's visual mode. In order to give the authors of these editors some time to focus on the essentials of geometry and stability, I added some functions to the Lua API in 0.20 to allow scripts to access map textures and lights. I also added a .save level command, which will export the level in its current texture state.

Since 0.20 came out, Irons and I have written a script which fairly accurately reproduces some of the major functionality in Forge's visual mode, appropriately called Visual Mode.lua.

You can get it from http://www.simplici7y.com/items/visual-mode-lua

Visual Mode.lua uses the engine's built-in keys, so it isn't quite as easy to use as Forge. But, once you get used to it, it should flow pretty well.

What can Forge do that Visual Mode.lua can also do?
  • Mouse click application of textures/landscapes, lights, and transfer modes to primary and secondary solid sides
  • Automatic alignment of surrounding textures
  • Drag to align textures (not quite as well as Forge, but OK)
  • Copy and apply textures without lights, copy and apply lights without textures, apply textures without aligning surrounding textures
  • Jump
  • One level Undo
What can Visual Mode.lua do that Forge can't do?
  • Work natively in Mac OS X, Windows, and Linux
  • Use OpenGL replacement textures
  • Not crash on long distance views, too many transparent lines
  • Apply textures from all collections, and all landscapes
  • Use larger texture collections without creating sequences, and landscape collections with multiple bitmaps
  • Use embedded shapes patches (including save)
  • Teleport to numbered polygon
  • Freeze in mid-air
  • Co-operative texturing
What can Forge do that Visual Mode.lua can't do (yet?)
  • Apply transparent textures
  • Drag to change floor/ceiling elevations
  • Place switches, pattern buffers, terminals, and rechargers
  • Be a little more elegant about the user interface, saving, etc., since it's a real application
We may be able to overcome these limitations some day, but in the mean time, this script plus Pfhorge should be an adequate Forge replacement. Smithy is also coming along nicely, so there's another option there.

22 June 2008

Aleph One 0.20

Aleph One 0.20 is finally ready. You can get it from http://source.bungie.org/get or http://marathon.sourceforge.net/

Highlights include a vastly improved Lua API, TrueType font support, major updates to themes and dialog layouts, enhanced Find Internet Game metaserver functionality, as well as lots of other features and bug fixes.

The full release notes are here

15 June 2008

Aleph One 0.20 RC1

Release Candidate 1 is ready, read all about it in my post to M-dev

08 June 2008

tab widget

Aleph One finally gets a real tab widget!

07 June 2008

texture palette

Lua scripts can display a bunch of textures instead of the HUD:

This might not be useful for anything, but it looks cool.

01 June 2008

solo lua

Now it's possible to pick a Lua script for use in solo play.


Getting tired of playing your favorite map? Assign a random texture to each wall, floor, and ceiling, and it's like playing a whole new map!

You can download the map here.

29 May 2008

terminal formatting

TrueType font rendering in terminals has been working for a while, but there were weird formatting problems. I finally tracked those down today, it turns out Bungie (Double Aught?) used tab characters in their terminals, and the old Mac OS font renderer happily rendered them as single spaces! So, translating '\t' into ' ' was enough to fix TrueType terminal formatting.

28 May 2008

game info

In 0.20, it will be possible to see extended info about the game you're about to join (or not join) by clicking on the "Info" button, which brings up a dialog like this:

This should help you avoid joining terrible games like this guy's.

25 May 2008

console font

When I added TrueType font rendering for themes, it wasn't much more work to add it for the console, overhead map, HUD, and terminals as well (although the last are still a little buggy). So, a few weeks back, I switched the default console font to this nice anti-aliased one. The old one is still available using MML, of course.

20 May 2008


Zune's new "gapless" (close enough) playback works better with AACs than it does with Lame-encoded mp3s. So, a quick hack script was in order to convert my collection of FLACs into AACs. But, I have four cores, so the script had to take advantage of those! Here's my flac2m4a Python script, that will convert a whole folder hierarchy into m4a files. It uses as many cores as you have available, and copies cover art so Zune can understand it. It's a bit rough, though.
You will need:
Here's the script:
import os
import shutil
import pp

job_server = pp.Server()
jobs = []

def quote(s):
return s.replace('"', '\\"')

def convert_file(input,output):
flac_mapping = {'title': '\xa9nam', 'artist': '\xa9ART', 'album': '\xa9alb', 'genre': '\xa9gen', 'description': '\xa9cmt', 'composer': '\xa9wrt', 'date': '\xa9day'}

command = 'flac -d -c -s "' + quote(input) + '" | neroAacEnc -br 128000 -lc -if - -of "' + quote(output) + '" 2>/dev/null'
tagsource = mutagen.flac.FLAC(input)
tagdest = mutagen.mp4.MP4(output)
for k, v in flac_mapping.iteritems():
if tagsource.has_key(k):
tagdest[v] = tagsource[k]
if tagsource.has_key('tracknumber'):
tagdest['trkn'] = [(int(tagsource['tracknumber'][0]), 0)]
tagdest['pgap'] = True
return "processed " + os.path.basename(output)

def convert_directory(src, dst):
srcnames = os.listdir(src)
for name in srcnames:
srcfname = os.path.join(src, name)
dstfname = os.path.join(dst, name)
if (os.path.isdir(srcfname)):
convert_directory(srcfname, os.path.join(dst, name))
elif (name.endswith('.flac')):
newname = name[:-4] + "m4a"
jobs.append(job_server.submit(convert_file, (srcfname, os.path.join(dst, newname)), (quote,), ("mutagen.flac", "mutagen.mp4", "os", "sys")))
elif (name == "cover.jpg"):
shutil.copyfile(srcfname, os.path.join(dst, "ZuneCustomAlbumArt.jpg"))

if __name__ == "__main__":
import sys
if len(sys.argv) == 3:
print "Starting pp with", job_server.get_ncpus(), "workers"
convert_directory(sys.argv[1], sys.argv[2])
for i, job in enumerate(jobs):
print job(), str(i+1) + "/" + str(len(jobs))
print "usage: flac2m4a <input> <output>"

tiny buttons

In order to make room for everything in the Locate Network Games dialog, it was necessary to make smaller buttons than appear in other dialogs. I call them tiny buttons.