aboutsummaryrefslogtreecommitdiffstats
path: root/code/bspc/be_aas_bspc.c
diff options
context:
space:
mode:
Diffstat (limited to 'code/bspc/be_aas_bspc.c')
-rwxr-xr-xcode/bspc/be_aas_bspc.c292
1 files changed, 292 insertions, 0 deletions
diff --git a/code/bspc/be_aas_bspc.c b/code/bspc/be_aas_bspc.c
new file mode 100755
index 0000000..127549c
--- /dev/null
+++ b/code/bspc/be_aas_bspc.c
@@ -0,0 +1,292 @@
+/*
+===========================================================================
+Copyright (C) 1999-2005 Id Software, Inc.
+
+This file is part of Quake III Arena source code.
+
+Quake III Arena source code is free software; you can redistribute it
+and/or modify it under the terms of the GNU General Public License as
+published by the Free Software Foundation; either version 2 of the License,
+or (at your option) any later version.
+
+Quake III Arena source code is distributed in the hope that it will be
+useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Foobar; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+===========================================================================
+*/
+
+#include "../game/q_shared.h"
+#include "../bspc/l_log.h"
+#include "../bspc/l_qfiles.h"
+#include "../botlib/l_memory.h"
+#include "../botlib/l_script.h"
+#include "../botlib/l_precomp.h"
+#include "../botlib/l_struct.h"
+#include "../botlib/aasfile.h"
+#include "../game/botlib.h"
+#include "../game/be_aas.h"
+#include "../botlib/be_aas_def.h"
+#include "../qcommon/cm_public.h"
+
+//#define BSPC
+
+extern botlib_import_t botimport;
+extern qboolean capsule_collision;
+
+botlib_import_t botimport;
+clipHandle_t worldmodel;
+
+void Error (char *error, ...);
+
+//===========================================================================
+//
+// Parameter: -
+// Returns: -
+// Changes Globals: -
+//===========================================================================
+void AAS_Error(char *fmt, ...)
+{
+ va_list argptr;
+ char text[1024];
+
+ va_start(argptr, fmt);
+ vsprintf(text, fmt, argptr);
+ va_end(argptr);
+
+ Error(text);
+} //end of the function AAS_Error
+//===========================================================================
+//
+// Parameter: -
+// Returns: -
+// Changes Globals: -
+//===========================================================================
+int Sys_MilliSeconds(void)
+{
+ return clock() * 1000 / CLOCKS_PER_SEC;
+} //end of the function Sys_MilliSeconds
+//===========================================================================
+//
+// Parameter: -
+// Returns: -
+// Changes Globals: -
+//===========================================================================
+void AAS_DebugLine(vec3_t start, vec3_t end, int color)
+{
+} //end of the function AAS_DebugLine
+//===========================================================================
+//
+// Parameter: -
+// Returns: -
+// Changes Globals: -
+//===========================================================================
+void AAS_ClearShownDebugLines(void)
+{
+} //end of the function AAS_ClearShownDebugLines
+//===========================================================================
+//
+// Parameter: -
+// Returns: -
+// Changes Globals: -
+//===========================================================================
+char *BotImport_BSPEntityData(void)
+{
+ return CM_EntityString();
+} //end of the function AAS_GetEntityData
+//===========================================================================
+//
+// Parameter: -
+// Returns: -
+// Changes Globals: -
+//===========================================================================
+void BotImport_Trace(bsp_trace_t *bsptrace, vec3_t start, vec3_t mins, vec3_t maxs, vec3_t end, int passent, int contentmask)
+{
+ trace_t result;
+
+ CM_BoxTrace(&result, start, end, mins, maxs, worldmodel, contentmask, capsule_collision);
+
+ bsptrace->allsolid = result.allsolid;
+ bsptrace->contents = result.contents;
+ VectorCopy(result.endpos, bsptrace->endpos);
+ bsptrace->ent = result.entityNum;
+ bsptrace->fraction = result.fraction;
+ bsptrace->exp_dist = 0;
+ bsptrace->plane.dist = result.plane.dist;
+ VectorCopy(result.plane.normal, bsptrace->plane.normal);
+ bsptrace->plane.signbits = result.plane.signbits;
+ bsptrace->plane.type = result.plane.type;
+ bsptrace->sidenum = 0;
+ bsptrace->startsolid = result.startsolid;
+ bsptrace->surface.flags = result.surfaceFlags;
+} //end of the function BotImport_Trace
+//===========================================================================
+//
+// Parameter: -
+// Returns: -
+// Changes Globals: -
+//===========================================================================
+int BotImport_PointContents(vec3_t p)
+{
+ return CM_PointContents(p, worldmodel);
+} //end of the function BotImport_PointContents
+//===========================================================================
+//
+// Parameter: -
+// Returns: -
+// Changes Globals: -
+//===========================================================================
+void *BotImport_GetMemory(int size)
+{
+ return GetMemory(size);
+} //end of the function BotImport_GetMemory
+//===========================================================================
+//
+// Parameter: -
+// Returns: -
+// Changes Globals: -
+//===========================================================================
+void BotImport_Print(int type, char *fmt, ...)
+{
+ va_list argptr;
+ char buf[1024];
+
+ va_start(argptr, fmt);
+ vsprintf(buf, fmt, argptr);
+ printf(buf);
+ if (buf[0] != '\r') Log_Write(buf);
+ va_end(argptr);
+} //end of the function BotImport_Print
+//===========================================================================
+//
+// Parameter: -
+// Returns: -
+// Changes Globals: -
+//===========================================================================
+void BotImport_BSPModelMinsMaxsOrigin(int modelnum, vec3_t angles, vec3_t outmins, vec3_t outmaxs, vec3_t origin)
+{
+ clipHandle_t h;
+ vec3_t mins, maxs;
+ float max;
+ int i;
+
+ h = CM_InlineModel(modelnum);
+ CM_ModelBounds(h, mins, maxs);
+ //if the model is rotated
+ if ((angles[0] || angles[1] || angles[2]))
+ { // expand for rotation
+
+ max = RadiusFromBounds(mins, maxs);
+ for (i = 0; i < 3; i++)
+ {
+ mins[i] = (mins[i] + maxs[i]) * 0.5 - max;
+ maxs[i] = (mins[i] + maxs[i]) * 0.5 + max;
+ } //end for
+ } //end if
+ if (outmins) VectorCopy(mins, outmins);
+ if (outmaxs) VectorCopy(maxs, outmaxs);
+ if (origin) VectorClear(origin);
+} //end of the function BotImport_BSPModelMinsMaxsOrigin
+//===========================================================================
+//
+// Parameter: -
+// Returns: -
+// Changes Globals: -
+//===========================================================================
+void Com_DPrintf(char *fmt, ...)
+{
+ va_list argptr;
+ char buf[1024];
+
+ va_start(argptr, fmt);
+ vsprintf(buf, fmt, argptr);
+ printf(buf);
+ if (buf[0] != '\r') Log_Write(buf);
+ va_end(argptr);
+} //end of the function Com_DPrintf
+//===========================================================================
+//
+// Parameter: -
+// Returns: -
+// Changes Globals: -
+//===========================================================================
+int COM_Compress( char *data_p ) {
+ return strlen(data_p);
+}
+//===========================================================================
+//
+// Parameter: -
+// Returns: -
+// Changes Globals: -
+//===========================================================================
+void Com_Memset (void* dest, const int val, const size_t count) {
+ memset(dest, val, count);
+}
+//===========================================================================
+//
+// Parameter: -
+// Returns: -
+// Changes Globals: -
+//===========================================================================
+void Com_Memcpy (void* dest, const void* src, const size_t count) {
+ memcpy(dest, src, count);
+}
+//===========================================================================
+//
+// Parameter: -
+// Returns: -
+// Changes Globals: -
+//===========================================================================
+void AAS_InitBotImport(void)
+{
+ botimport.BSPEntityData = BotImport_BSPEntityData;
+ botimport.GetMemory = BotImport_GetMemory;
+ botimport.FreeMemory = FreeMemory;
+ botimport.Trace = BotImport_Trace;
+ botimport.PointContents = BotImport_PointContents;
+ botimport.Print = BotImport_Print;
+ botimport.BSPModelMinsMaxsOrigin = BotImport_BSPModelMinsMaxsOrigin;
+} //end of the function AAS_InitBotImport
+//===========================================================================
+//
+// Parameter: -
+// Returns: -
+// Changes Globals: -
+//===========================================================================
+void AAS_CalcReachAndClusters(struct quakefile_s *qf)
+{
+ float time;
+
+ Log_Print("loading collision map...\n");
+ //
+ if (!qf->pakfile[0]) strcpy(qf->pakfile, qf->filename);
+ //load the map
+ CM_LoadMap((char *) qf, qfalse, &aasworld.bspchecksum);
+ //get a handle to the world model
+ worldmodel = CM_InlineModel(0); // 0 = world, 1 + are bmodels
+ //initialize bot import structure
+ AAS_InitBotImport();
+ //load the BSP entity string
+ AAS_LoadBSPFile();
+ //init physics settings
+ AAS_InitSettings();
+ //initialize AAS link heap
+ AAS_InitAASLinkHeap();
+ //initialize the AAS linked entities for the new map
+ AAS_InitAASLinkedEntities();
+ //reset all reachabilities and clusters
+ aasworld.reachabilitysize = 0;
+ aasworld.numclusters = 0;
+ //set all view portals as cluster portals in case we re-calculate the reachabilities and clusters (with -reach)
+ AAS_SetViewPortalsAsClusterPortals();
+ //calculate reachabilities
+ AAS_InitReachability();
+ time = 0;
+ while(AAS_ContinueInitReachability(time)) time++;
+ //calculate clusters
+ AAS_InitClustering();
+} //end of the function AAS_CalcReachAndClusters