My Quake Editor

Jonathan Mavor (nstorm@sonetis.com)
Tue, 25 Jun 1996 14:05:19 -0700

Date: Tue, 25 Jun 1996 14:05:19 -0700
Message-Id: <199606252105.AA24598@relay.interserv.com>
To: quake-dev@gamers.org
From: Jonathan Mavor <nstorm@sonetis.com>
Subject: My Quake Editor

I've quickly caught up on the past messages from the list.
I thought I would describe my editor, where it is and where I want
it to go.

I'm writing the editor using VC++ 4.1/MFC to run under
95 and NT (I'm developing it on 95). It's using an MDI paradigm
so you can have multiple maps open at one time.

I'm using the standard technique of brushes. You can create
different brushes using different dialogs that I have (for instance
cube, spheroid and cylinder right now). I want to have importing
of brushes and a lofter in there also. Within the world brushes
can be rotated, scaled, translated and sheared on any axis.

The one interesting thing about my editor is that I'm
allow concave brushes to be used. When I export to quake .MAP
format these brushes will be broken up into multiple convex
brushes. Since I am allowing these, my brush dialogs allow
the creation of hollow brushes (for instance hollow tubes, spheres
and boxes right now). I'm also planning to put in dialogs to
create stairs (maybe even spiral), rings etc.

Within the world right now you can add and subtract brushes
to the world. I'm going to put in intersection and deintersection
so you can create new brushes by doing operations with the world.

Now, the neatest thing about my editor is that all the CSG
is done in realtime. When you add a brush to the world the world
immediately changes and you get the true solid representation of
the world.

Currently there are 5 window types (each window can be
set to any type using the menu). There is my old back-to-front
windows GDI renderer, a solid fill renderer like r_drawflat 1,
and 3 ortho views (front, top, side). In the renderer you can move
around with 6dof and look at how your level will actually be.

Things I have planned for this editor:
1. I'm going to put in a full perspective texture mapper, the user
will be able to select a polygon or groups of polygons while walking
around in the world and change the texture. They will also be able
to align it etc (ala buildEd).

2. I'm going to put in a raytracer, mipmapping etc so you can see
what the lighting looks like. For a fast machine what I want to do
when you place a light is to have it as a dynamic light, when the
user clicks I will raytrace the polygons within range of that light
and update the world so they can quickly make wicked looking lighting.

3. I'm going to fix up the GUI more as there are some issue with
moving around and zooming in ortho views. I'm going to put in lots
of functions to align brushes with parts of the world that are already
there.

4. I'm going to put in some sort of grouping selection system for
brushes so you can edit a small part of the world in the ortho
views at one time. Each "group" will have it's brushes show up
as a different colour.

5. I'm going to put in a brush wireframe 3d mode so that you can
modify brushes that have been added/subbed from the world (move,
delete etc). Since the renderer uses the BSP I build when csging
you will have to rebuild the bsp after using this mode. I already
have a reasonably optimal procedural csg bsp builder going
which allows you to rebuild the world (it's SLLLLLOOOOOW though).

I'm also going to do a full undo system and any other things
which make an editor cool. For the future I'm thinking direct3d
support, and possibly directdraw. I'm using createdibsection
right now for the output from the renderer. I'm going to be choosing
some beta testers soon to release my editor to (once I get
the tmapping and texture selection in).


Any questions/comments?

L8r,
Jon