fteqw/engine/qclib
Spoike b9cd6ec91b openxr plugin: tweaked - inputs should be working properly now, and are visible to csqc. subject to further breaking changes, however.
_pext_vrinputs: added cvar to enable vr inputs protocol extension allowing vr inputs to be networked to ssqc too. defaults to 0 for now, will be renamed when deemed final.
updates menu: the prompt to enable sources is now more explicit instead of expecting the user to have a clue.
updates menu: added a v3 sources format, which should be more maintainable. not final.
updates menu: try to give reasons why sources might be failing (to help blame ISPs if they try fucking over TTH dns again).
presets menu: no longer closes the instant a preset is chosen. some presets have a couple of modifiers listed. force the demo loop in the background to serve as a preview.
prompts menus: now does word wrapping.
ftemaster: support importing server lists from other master servers (requested by Eukara).
server: try to detect when non-reply inbound packets are blocked by firewalls/nats/etc (using ftemaster to do so).
qcvm: added pointcontentsmask builtin, allowing it to probe more than just world, with fte's full contentbit range instead of just q1 legacy.
qcvm: memfill8 builtin now works on createbuffer() pointers.
qcvm: add missing unsigned ops. Fixed double comparison ops. fixed bug with op_store_i64. added missing OP_LOADP_I64
qcc: added '#pragma framerate RATE' for overriding implicit nextthink durations.
qcc: fixed '#pragma DONT_COMPILE_THIS_FILE' to not screw up comments.
qcc: added __GITURL__ __GITHASH__ __GITDATE__ __GITDATETIME__ __GITDESC__ for any mods that might want to make use of that.
qcc: fix up -Fhashonly a little
setrenderer: support for vulkan gpu enumeration.
rulesets: reworked to support custom rulesets (using hashes to catch haxxors, though still nothing prevents just changing the client to ignore rulesets)
bspx: use our BIH code for the bspx BRUSHLIST lump instead of the older less efficient code.
(static)iqm+obj: these model formats can now be used for the worldmodel (with a suitable .ent file). Also using BIH for much better collision performance.
pmove: tried to optimise PM_NudgePosition, should boost fps in stress tests.
wayland: fix a crash on startup. mousegrabs now works better.
imagetool: uses sdl for previews.


git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5813 fc73d0e0-1445-4013-8a0c-d673dee63da5
2021-04-14 05:21:04 +00:00
..
dotnet2008 Added MSVC9 (dotnet2008) & MSVC10 (dotnet2010) project files for QCLIB aka FTEQCC 2011-07-16 11:25:56 +00:00
dotnet2010 Added MSVC9 (dotnet2008) & MSVC10 (dotnet2010) project files for QCLIB aka FTEQCC 2011-07-16 11:25:56 +00:00
vc6 Added MSVC9 (dotnet2008) & MSVC10 (dotnet2010) project files for QCLIB aka FTEQCC 2011-07-16 11:25:56 +00:00
LICENSE GNU GPL V2 2005-06-01 18:33:06 +00:00
Makefile Fix qclib-only makefile. 2020-11-12 20:48:02 +00:00
byshpuld.ico added qccgui icon (courtesy of shpuld) 2015-12-28 17:41:39 +00:00
cmdlib.h big commit. :( 2020-10-26 06:30:35 +00:00
comprout.c Make sizeof into an actual operator instead of a mere intrinsic 2020-09-11 01:18:32 +00:00
decomp.c qcc: Add unsigned int, long/__int64, unsigned long/__uint64, and double datatypes to qcc+qcvm. 2020-09-29 07:09:01 +00:00
execloop.h openxr plugin: tweaked - inputs should be working properly now, and are visible to csqc. subject to further breaking changes, however. 2021-04-14 05:21:04 +00:00
fteqcc.rc added qccgui icon (courtesy of shpuld) 2015-12-28 17:41:39 +00:00
gui.h Attempt to add autocomplete+calltips to the qt version of fteqccgui. 2020-03-14 17:38:55 +00:00
hash.c big commit. :( 2020-10-26 06:30:35 +00:00
hash.h Reworked networking a little, separating out common code for separate server/master processes. 2018-12-28 00:04:36 +00:00
initlib.c openxr plugin: tweaked - inputs should be working properly now, and are visible to csqc. subject to further breaking changes, however. 2021-04-14 05:21:04 +00:00
packager.c Fix windows build issue. 2021-02-15 21:43:54 +00:00
pr_comp.h openxr plugin: tweaked - inputs should be working properly now, and are visible to csqc. subject to further breaking changes, however. 2021-04-14 05:21:04 +00:00
pr_edict.c qcc: Add unsigned int, long/__int64, unsigned long/__uint64, and double datatypes to qcc+qcvm. 2020-09-29 07:09:01 +00:00
pr_exec.c big commit. :( 2020-10-26 06:30:35 +00:00
pr_multi.c qcc: Add unsigned int, long/__int64, unsigned long/__uint64, and double datatypes to qcc+qcvm. 2020-09-29 07:09:01 +00:00
pr_x86.c added cmake file. 2018-03-04 14:41:16 +00:00
progsint.h openxr plugin: tweaked - inputs should be working properly now, and are visible to csqc. subject to further breaking changes, however. 2021-04-14 05:21:04 +00:00
progslib.h openxr plugin: tweaked - inputs should be working properly now, and are visible to csqc. subject to further breaking changes, however. 2021-04-14 05:21:04 +00:00
progtype.h openxr plugin: tweaked - inputs should be working properly now, and are visible to csqc. subject to further breaking changes, however. 2021-04-14 05:21:04 +00:00
qcc.h openxr plugin: tweaked - inputs should be working properly now, and are visible to csqc. subject to further breaking changes, however. 2021-04-14 05:21:04 +00:00
qcc_cmdlib.c qcc: Add unsigned int, long/__int64, unsigned long/__uint64, and double datatypes to qcc+qcvm. 2020-09-29 07:09:01 +00:00
qcc_pr_comp.c openxr plugin: tweaked - inputs should be working properly now, and are visible to csqc. subject to further breaking changes, however. 2021-04-14 05:21:04 +00:00
qcc_pr_lex.c openxr plugin: tweaked - inputs should be working properly now, and are visible to csqc. subject to further breaking changes, however. 2021-04-14 05:21:04 +00:00
qccgui.c Fix fteqccgui compile issue. 2020-07-02 16:29:01 +00:00
qccguiqt.cpp try to fix vulkan validation warnings (and maybe some crashes on amd gpus) 2020-11-04 10:19:30 +00:00
qccguistuff.c big commit. :( 2020-10-26 06:30:35 +00:00
qccmain.c openxr plugin: tweaked - inputs should be working properly now, and are visible to csqc. subject to further breaking changes, however. 2021-04-14 05:21:04 +00:00
qcctui.c big commit. :( 2020-10-26 06:30:35 +00:00
qcd.h Early version of fteqccgui-qt 2019-01-20 01:00:18 +00:00
qcd_main.c big commit. :( 2020-10-26 06:30:35 +00:00
qcdecomp.c remove the old SCVAR macro 2016-09-08 19:04:35 +00:00
readme.txt origional -> original. 2005-07-28 15:52:31 +00:00
test.c makefile: attempt to fix freetype when not using makelibs (should make it slightly easier for people to compile with msys2 without needing to resort to cmake). 2020-06-12 23:29:58 +00:00

readme.txt

Readme for the FTE QCLib

This library is a library for running QuakeC gamecode. It does not provide any builtins itself.

Features:
	* Multiple library instances, enabling server qc, client qc, and menu qc. There is no maximum instance limit other than memory.

	* Addons, for running multiple progs in any individual instance.

	* Field reassignment, allowing a single engine to support multiple subtly different QC APIs. Also makes additional fields easier.

	* Step-by-step debugging. Requires a text editor of some form, however. A printout of the current line is also useful of course.

	* 64bit support. All strings, globals, and fields are allocated in a consecutive addressable section of memory. This also allows pointers and secure access (not implemented yet, but should be relativly easy bar builtins, which are your responsability).

	* Multiple 'threads'. The library allows a builtin to make a duplicate of the current execution state, or to wipe the current state. This allows sleep commands and fork commands. How handy.

	* Integrated QC compiler. FTEQCC comes as part of qclib. By setting up an interface with a specific value, you can cause it to always run, or run only if it detects a source change.

	* Support for different sorts of progs. Namly Hexen2's, kkqwsv's bigprogs, and FTE's extended format with extra opcodes and possibly fully 32bit offsets. The use of kkqwsv's progs is not recommended - this might be removed at some point.




Quirks:
	* don't use multiple instances of fteqcc at the same time. Compilation will fail.
	* 64bit support requires all strings to be allocated by qclib itself, achivable via a method call. Compatability requires a certain ammount of caution.
	* a fair number of methods are obsolete.
	* An overuse of pointers in the API. There are some macros which you can use to hide some of the dereferences.
	* kkqwsv progs are not reliable. Do not try saving the game. Avoid letting your users know of support.
	
	* Builtin structures are different from original quake. You'll need to convert the arguments to qclib style. This change was required for both multiple instances as well as addon support. It should be straightforward enough.
	* Entity fields are accessed via a pointer from the edict_t structure. This was required to place entity fields within the 64bit accessable section. Changing a . to a -> is not a major issue though. However, there are a lot. do a find and replace of ->v. to ->v->
	* FTE's entities are numbers not pointers. This fact is not made into a big feature as it's kinda incompatable with standard quake. Please do not use numbers directly to refer to ents but instead use the EDICT_TO_PROGS macro which will give protection. This is consistant with standard quake.


Basic usage:
	* refer to test.c for a sample on how to set up the library.
	* refer to progslib.h for the things that I've forgotten to mention.
	* Call the InitProgs function to get a handle to the instance. It takes a parameter which should be set up with some fields. You'll require ReadFile, FileSize, Abort and printf for basic execution.
	* Call the configure function to say how much memory to use, and how many progs/addons to support.
	* Load your progs via LoadProgs. Use a crc of 0 to use any. Otherwise progs will be rejected if it doesn't match. Give it a list of progs-specific builtins too. :)
	* Before calling the spawn builtin, call the InitEnts method. It's parameter stating how many maximum entities to spawn. Using a really large quantity is not much of an issue, as they are allocated as required.
	* Before calling InitEnts, you can tell the VM which fields your engine uses (state all basic ones or none). This will place the entity fields in the same order as your engine expects for entvars_t.
	* Obtain pointers to globals, or just use the globals structure directly.
	* Call the ExecuteProgram method to start execution.
	* Call the FindFunction method to find a function to run in the first place.
	* Call the 'globals' method to retrieve a pointer to the globals (you should always use PR_CURRENT here). Set the parameters with the G_INT/G_FLOAT macros and friends. Use OFS_PARM0 - OFS_PARM7 to set params before calling or read inside a builtin. Use OFS_RETURN to read the return value. These macros are hard coded to use a 'pr_globals' symbol, so avoid renaming builtin parameter names.
	* Ask me on IRC when it all starts keeling over.
	* These are the C files that form qclib: pr_edict.c pr_exec.c pr_multi.c initlib.c qcc_pr_comp.c qcc_pr_lex.c qccmain.c qcc_cmdlib.c comprout.c hash.c qcd_main.c qcdecomp.c