1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- oopless-parser.hpp / oopless-parser.cpp
- Parses Reflex's .map file, both version 6 and version 8.
- Reflex Map Format
- Reflex maps are plain text files featuring keywords and indentation levels.
- Reflex map keywords:
- Ordered by indentation level (outer to inner).
- "global"
- "prefab"
- "entity"
- "brush"
- "vertices"
- "faces"
- "vertices" and "faces", sharing the level, are contained in brushes.
- "brush" and "entity", sharing the level are contained in prefabs.
- "global" largely behaves the same as prefabs.
- There are two distinct map formats from Reflex- V6 and V8.
- V6 was the map format before the addition of prefabs (V8 feature).
- As far as the conversion process is concerned:
- 'global' and 'prefab' are containers for map objects.
- 'entity' and 'brush' are map objects (but entity may contain a brush).
- 'vertices' and 'faces' are details of brushes.
- Brush Data
- Brushes contain faces and vertices.
- A brush's faces and vertices are listed in its "faces" and "vertices".
- Vertex Data
- A vertex contains 3 floats representing a coordinate.
- Reflex uses a right-handed coordinate system while idTech engine uses left.
- Face Data
- Faces contain the texture definition, indices, & the texture to be applied.
- Each field in the line, being the entire face, is separated by space.
- The first 5 fields are always data for the texture definition.
- In order,
- * texture x offset
- * texture y offset
- * texture x scale
- * texture y scale
- * texture rotation
-
- The next fields are integers being indices for the list of vertices for
- the brush.
- Followed by an hex digit for the color code in sRGB to apply to the face.
- Then followed by the path to the texture asset.
- Parsing States
- GLOBAL or PREFAB -> {BRUSH, ENTITY}
- BRUSH -> {FACES, VERTICES}
- VERTICES -> {FACES, BRUSH, ENTITY}
- FACES -> {VERTICES, BRUSH, ENTITY, PREFAB}
- ENTITY -> {ENTITY, BRUSH, PREFAB}
- In all observations, VERTICES are defined before FACES.
- Entities may contain brushes as a part of its data; however it is not
- reflected in indentation levels in Reflex. Thus for the conversion,
- brushes must be contained in the entity string, and converted in a
- different phase (because the worldspawn entity in idTech excludes
- entity-brushes). The parser transitions out of handling the entity when
- it hits the brush keyword and the entity's type does not match is not of
- a specific set of types.
- Implementation Overview
- Each parsing function:
- - assumes by the time it is called, the respective keyword has already
- been advanced past.
- - retrieves the next line from the input stream
- - detects next possible parsing states
- - will output its respective data structure
|