No description
Find a file
Bill Currie 9798400cfb [ui] Add a sub-system for parsing text passages
A passage object has a list of all the text objects in the given string,
where the objects represent either white space or "words", as well as a
view_t object representing the entire passage, with paragraphs split
into child views of the passage view, and each paragraph has a child
view for every text/space object in the paragraph.

Paragraphs are split by '\n' (not included in any object).

White space is grouped into clumps such that multiple adjacent spaces
form a single object. The standard ASCII space (0x20) and all of the
Unicode characters marked "WS;<compat> 0020" are counted as white space.
Unless a white space object is the first in the paragraph, its view is
marked for suppression by the view flow code.

Contiguous non-white space characters are grouped into single objects,
and their views are not suppressed.

All text object views (both white space and "word") have their data
pointer set to the psg_text_t object representing the text for that
view. This should be suitable for simple text-mode unattributed display.
More advanced rendering would probably want to create suitable objects
and set the view data pointers to those objects.

No assumption is made about text direction.

Passage and paragraph views need to have their primary axis sizes set
appropriately, as well as their resize flags. Their xlen and ylen are
both set to 10, and xpos,ypos is 0,0. Paragraph views need their
setgeometry pointer set to the appropriate view_flow_* function.
However, they are set up to have their secondary axis set automatically
when flowed.

Text object views are set up for automatic flowing: grav_flow, 0,0 for
xpos,ypos. However, xlen and ylen are also both 0, so need to be set by
the renderer before attempting to flow the text.
2022-09-30 19:51:14 +09:00
config.d Merge branch 'master' into wip-twod 2022-09-22 10:06:00 +09:00
debian [build] Move to non-recursive make 2020-06-25 11:35:37 +09:00
desktop [build] Move to non-recursive make 2020-06-25 11:35:37 +09:00
doc [dox] Fix up some doxygen issues 2022-04-13 14:17:58 +09:00
hw [cvar] Make cvars properly typed 2022-04-24 19:15:22 +09:00
include [ui] Add a sub-system for parsing text passages 2022-09-30 19:51:14 +09:00
libs [ui] Add a sub-system for parsing text passages 2022-09-30 19:51:14 +09:00
m4 [build] Use AS_HELP_STRING on all the help strings 2021-12-24 06:45:13 +09:00
nq [client] Fix sbar hud resizing with window size 2022-09-22 01:40:30 +09:00
pkg-config [build] Move to non-recursive make 2020-06-25 11:35:37 +09:00
qtv [model] Move plane info into mnode_t, and visframe out 2022-05-22 12:41:23 +09:00
qw [client] Fix sbar hud resizing with window size 2022-09-22 01:40:30 +09:00
RPM [build] Move to non-recursive make 2020-06-25 11:35:37 +09:00
ruamoko [qwaq] Copy only those bytes in the colormap tex 2022-09-22 10:39:03 +09:00
tools [qfmap] Fix some blender bit-rot. 2022-09-22 09:35:56 +09:00
.gitignore [gamecode] Generate the new opcode table 2022-01-05 19:09:07 +09:00
bootstrap [build] Relax autoconf version requirement 2021-11-22 07:41:16 +09:00
configure.ac Merge branch 'master' into wip-twod 2022-09-22 10:06:00 +09:00
COPYING initial checkin of most recent newtree and nuq(?) source 2001-02-19 21:15:25 +00:00
INSTALL [build] Update for autoconf 2.71 2021-11-20 12:54:05 +09:00
Makefile.am Merge branch 'master' into wip-twod 2022-09-22 10:06:00 +09:00
NEWS Update for 0.7.2. 2013-01-23 12:01:36 +09:00
README.md Fix a typo 2022-04-01 10:40:26 +09:00
TODO Detect the silent death of the jack client thread. 2011-09-07 15:16:27 +09:00

QuakeForge

QuakeForge is descended from the original Quake engine as released by Id Software in December 1999, and can be used to play original Quake and QuakeWorld games and mods (including many modern mods). While this will always be the case, development continues.

However, QuakeForge is not just a Quake engine, but includes a collection of tools for creating Quake mods, and is progressing towards being a more general game engine.

Quake and QuakeWorld

Support for Quake and QuakeWorld is split into two program sets: nq for Quake and qw-client for QuakeWorld, with the target system as an additional suffix: -x11 For the X Window system (Linux, BSD, etc), -win for MS Windows (plus others that are not currently maintained).

Both nq and qw-client support multiple renderers: 8-bit software, 32-bit software, OpenGL 2, EGL (mostly, one non-EGL function is used), and Vulkan (very WIP), all within the one executable.

Dedicated servers for both Quake (nq-server) and QuakeWorld (qw-server) are included, as well as a master server for QuakeWorld (qw-master).

Tools

QuakeForge includes several tools for working with Quake data:

  • bsp2image produces wireframe images from Quake maps (bsp files)
  • io_mesh_qfmdl for importing and exporting Quake mdl files to/from Blender
  • io_qfmap for Quake map source files (WIP Blender addon)
  • pak create, list and extract Quake pak files. There's also zpak which can be used to compress the contents of pak files using gzip (QuakeForge has transparent support for gzip compressed files)
  • qfbsp for compiling map files to bsp files, includes support for vis clusters, and can be used to extract data and information from bsp files.
  • qfcc is QuakeForge's version of qcc, but is significantly more advanced, with support for standard C syntax, including most C types, as well as Objective-C object oriented programming (Ruamoko). Mmost of the advanced features require the QuakeForge engine, but qfcc can produce progs files compatible with the original Quake engine with limited support for some of the advanced featuers (C syntax, reduced global usage, some additional operators (eg, better bit operators, remainder (%)). Includes qfprogs for inspecting progs files.
  • qflight creates lightmaps for Quake maps
  • qfvis for compiling PVS data for Quake maps. One of the faster implementations available.
  • Plus a few others in various stages of usefulness: qflmp, qfmodelgen, qfspritegen, wad, qfwavinfo

Building

For now, please refer to INSTALL for information on building on Linux. Building for windows is done by cross-compiling using MXE. There are scripts in tools/mingw and tools/mingw64 that automate the process of configuring and building both the tools run on the build-host and the windows targets.