This document serves as a sketchy proposal of an editing tool, conveniently named Q.E.D., aka Quot Esset Demonstrandum, if I am guessing correctly - this name will hopefully experience a minor change, later on. This document is closely related to the Quake Editing Primer that introduces terminology and concepts.
QED will be written for Linux, XFree86, using Mesa and the OpenGL API. Lacking the time for any tim consuming alternative, I will probably use OSF Motif 2.0 and the CDE Application Builder which will be available for Linux soon.
I do not know if QED will ever be a useful editing tool. The emphasis will be on implementing different ideas to create brushes, group brushes, and create templates. Even if you will not be able to do map editing with QED, it might ease creation of unusual brushes.
A basic editor should allow for the following basic operations:
A Brush Template is a Brush, stored in a different way. Like a Brush, any Brush Template consists of 4 or more Planes. We should try to store Brush Template using floating point coordinates, but bear in mind that more complicated shapes (i.e. polygonal approximations of quadric or curved surfaces) will change if mapped to a coarse integer grid after sacling down. This mapping will have to occur as soon a a scaled Brush Template is instantiated as a Brush.
In addition, there is no Texture on a Brush Template. I am not yet sure about this, as one might find ways to define texture offsets and orientations invariant with respect to scaling.
Examples of Brush Templates are the tetrahedron, the isocahedron, the cube.
{ ( 0 0 0 ) ( 1 0 0 ) ( 0 1 0 ) ( 0 0 1 ) ( 1 0 1 ) ( 0 1 1 ) ( 0 0 0 ) ( 0 1 0 ) ( 0 0 1 ) ( 1 0 0 ) ( 1 1 0 ) ( 1 0 1 ) ( 0 0 0 ) ( 1 0 0 ) ( 0 0 1 ) ( 0 1 0 ) ( 1 1 0 ) ( 0 1 1 ) }
This a an editing concept I am proposing that is not used by QuakeEd. The basic idea is that a Brush is supposed to be a block of material, and that "being marble" or any other material is a state in itself. Thus a Facet or a Brush is referencing an Entity, and the Entity is referencing a state and a related visual appearance. Unfortunately, the engine does not handle texture animation issues this way, too.
As far as editing is concerned, the major benefit is a more abstract and intuitive way of maintaining aliases. Instead of choosing a given Texture while editing a Brush, one might as well define a Texture Entity, and try different alternative Textures later on not by changing the Brushes, but only assigning different Textures to the Texture Entities. This, in a different context (namely SGML) is called descriptive vs. procedural markup, and the use of external entities.
In my proposal, Texture Entities are marked by &l;
preceeding a Texture Entity name. Thus &l; is no
valid character in a Texture Name anymore. Prior to
creating a MAP file suitable for qbsp
, all
external Texture Entities will have to be replaced
by valid Texture Names.
Here is a proposal of a Texture Alignment Mode operation: