From ff55f3d9b312924494e2146166377723e25bb07e Mon Sep 17 00:00:00 2001 From: Justin Marshall Date: Sat, 8 Aug 2026 05:03:09 -0700 Subject: [PATCH] Fixed broken UI transitions. Fixed collision manager code that wasn't properly reverse engineered. Fixed session code. Fixed numerous crashes. --- src/CMakeLists.txt | 5 + src/cm/CollisionModel_local.h | 9 + src/cm/collisionmodel_files.cpp | 248 +- src/cm/collisionmodel_load.cpp | 83 + src/cm/collisionmodel_translate.cpp | 235 +- src/cm/collisionmodel_translate_legacy.inc | 64 +- src/engine/CMakeLists.txt | 17 +- src/framework/Session_local.h | 10 +- src/framework/async/NetworkSystem.h | 27 - src/framework/async/networksystem.cpp | 187 +- src/framework/common.cpp | 1 + src/framework/console.cpp | 22 +- src/framework/declManager.h | 39 +- src/framework/declmanager.cpp | 13 +- src/framework/session.cpp | 80 +- src/game/Game_local.cpp | 28 +- src/game/gamesys/Callbacks.cpp | 2624 -------------------- src/game/gamesys/Class.cpp | 4 - src/game/gamesys/SaveGame.cpp | 4 - src/game/gamesys/SysCmds.cpp | 6 +- src/game/physics/Clip.cpp | 1 - src/idlib/CMakeLists.txt | 39 + src/idlib/Lib.cpp | 2 +- src/mpgame/Game_local.cpp | 1 + src/renderer/Image.h | 5 +- src/renderer/RenderWorld_local.h | 12 +- src/renderer/draw_arb2.cpp | 8 +- src/renderer/image_init.cpp | 27 + src/renderer/image_program.cpp | 46 +- src/renderer/material.cpp | 313 ++- src/renderer/model.cpp | 4 +- src/renderer/renderworld.cpp | 116 +- src/renderer/renderworld_load.cpp | 54 +- src/renderer/renderworld_portals.cpp | 42 + src/renderer/tr_backend.cpp | 6 + src/renderer/tr_light.cpp | 231 ++ src/renderer/tr_local.h | 22 + src/renderer/tr_main.cpp | 9 +- src/sound/snd_shader.cpp | 107 +- src/ui/UserInterface.h | 2 +- src/ui/guiscript.cpp | 237 +- src/ui/window.cpp | 35 +- 42 files changed, 1951 insertions(+), 3074 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d201aca..35c5d6b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -16,6 +16,7 @@ set(CMAKE_CXX_EXTENSIONS ON) option(Q4_BUILD_IDLIB "Build the Quake 4 SDK idlib seed" ON) option(Q4_BUILD_ENGINE_SEED "Compile the PDB-proven Doom engine seed" ON) +option(Q4_BUILD_GAME_DLL "Build the Quake 4 single-player game DLL" ON) option(Q4_BUILD_RECON_TOOLS "Build reconstruction inventory tools" ON) if(MSVC) @@ -34,6 +35,10 @@ if(Q4_BUILD_ENGINE_SEED) add_subdirectory(engine) endif() +if(Q4_BUILD_GAME_DLL) + add_subdirectory(game) +endif() + if(Q4_BUILD_RECON_TOOLS) add_subdirectory(tools/reconstruction) endif() diff --git a/src/cm/CollisionModel_local.h b/src/cm/CollisionModel_local.h index 338c939..d8be7ce 100644 --- a/src/cm/CollisionModel_local.h +++ b/src/cm/CollisionModel_local.h @@ -510,6 +510,8 @@ private: void RemapEdges( cm_node_t *node, int *edgeRemap ); void RemapPolygonReferences_r( cm_node_t *node, cm_polygon_t *polygon, cm_polygon_t *newPolygon ); void RemapBrushReferences_r( cm_node_t *node, cm_brush_t *brush, cm_brush_t *newBrush ); + void R_FilterPolygonIntoTree( idCollisionModelLocal *model, cm_node_t *node, cm_polygonRef_t *pref, cm_polygon_t *polygon ); + void R_FilterBrushIntoTree( idCollisionModelLocal *model, cm_node_t *node, cm_brushRef_t *pref, cm_brush_t *brush ); void RemovePolygonReferences_r( cm_node_t *node, cm_polygon_t *polygon ); void RemoveBrushReferences_r( cm_node_t *node, cm_brush_t *brush ); void FreeTree_r( idCollisionModelLocal *model, cm_node_t *headNode, cm_node_t *node ); @@ -540,6 +542,13 @@ private: bool TestTrmInPolygon( cm_traceWork_t *traceWork, cm_polygon_t *polygon ); bool RotateTrmThroughPolygon( cm_traceWork_t *traceWork, cm_polygon_t *polygon ); bool TranslateTrmThroughPolygon( cm_traceWork_t *traceWork, cm_polygon_t *polygon ); + int TranslateEdgeThroughEdge( idVec3 &cross, idPluecker &l1, idPluecker &l2, float *fraction ); + void TranslateTrmEdgeThroughPolygon( cm_traceWork_t *tw, cm_polygon_t *poly, cm_trmEdge_t *trmEdge ); + void TranslateTrmVertexThroughPolygon( cm_traceWork_t *tw, cm_polygon_t *poly, cm_trmVertex_t *v, int bitNum ); + void TranslatePointThroughPolygon( cm_traceWork_t *tw, cm_polygon_t *poly, cm_trmVertex_t *v ); + void TranslateVertexThroughTrmPolygon( cm_traceWork_t *tw, cm_trmPolygon_t *trmpoly, + cm_polygon_t *poly, cm_vertex_t *v, idVec3 &endp, idPluecker &pl ); + void SetupTranslationHeartPlanes( cm_traceWork_t *tw ); void CM_GetCollisionPointTexCoords( idVec2 &texCoord, cm_traceWork_t *traceWork, cm_polygon_t *polygon ); void CM_GetMaterialType( cm_traceWork_t *traceWork, cm_polygon_t *polygon ); bool IsRenderModelName( const char *name ); diff --git a/src/cm/collisionmodel_files.cpp b/src/cm/collisionmodel_files.cpp index b4e0d7b..92e3309 100644 --- a/src/cm/collisionmodel_files.cpp +++ b/src/cm/collisionmodel_files.cpp @@ -37,14 +37,17 @@ along with Quake 4 Reconstructed Source Code. If not, see numNodes; + cm_node_t *node = AllocNode( model, + model->numNodes < NODE_BLOCK_SIZE_SMALL ? NODE_BLOCK_SIZE_SMALL : NODE_BLOCK_SIZE_LARGE ); + node->brushes = NULL; + node->polygons = NULL; + node->parent = parent; + lexer->ExpectTokenString( "(" ); + node->planeType = lexer->ParseInt(); + node->planeDist = lexer->ParseFloat(); + lexer->ExpectTokenString( ")" ); + if ( node->planeType != -1 ) { + node->children[0] = ParseNodes( lexer, model, node ); + node->children[1] = ParseNodes( lexer, model, node ); + } + return node; +} + +void idCollisionModelManagerLocal::ParseVertices( Lexer *lexer, idCollisionModelLocal *model ) { + lexer->ExpectTokenString( "{" ); + model->maxVertices = model->numVertices = lexer->ParseInt(); + model->vertices = static_cast( Mem_Alloc( model->maxVertices * sizeof( cm_vertex_t ), MA_CM ) ); + memset( model->vertices, 0, model->maxVertices * sizeof( cm_vertex_t ) ); + for ( int i = 0; i < model->numVertices; ++i ) { + lexer->Parse1DMatrix( 3, model->vertices[i].p.ToFloatPtr() ); + } + lexer->ExpectTokenString( "}" ); +} + +void idCollisionModelManagerLocal::ParseEdges( Lexer *lexer, idCollisionModelLocal *model ) { + lexer->ExpectTokenString( "{" ); + model->maxEdges = model->numEdges = lexer->ParseInt(); + model->edges = static_cast( Mem_Alloc( model->maxEdges * sizeof( cm_edge_t ), MA_CM ) ); + memset( model->edges, 0, model->maxEdges * sizeof( cm_edge_t ) ); + for ( int i = 0; i < model->numEdges; ++i ) { + lexer->ExpectTokenString( "(" ); + model->edges[i].vertexNum[0] = lexer->ParseInt(); + model->edges[i].vertexNum[1] = lexer->ParseInt(); + lexer->ExpectTokenString( ")" ); + model->edges[i].internal = lexer->ParseInt(); + model->edges[i].numUsers = lexer->ParseInt(); + model->edges[i].normal.Zero(); + model->numInternalEdges += model->edges[i].internal; + } + lexer->ExpectTokenString( "}" ); +} + +void idCollisionModelManagerLocal::ParsePolygons( Lexer *lexer, idCollisionModelLocal *model ) { + idToken token; + idVec3 normal; + + model->maxPolygons = lexer->ParseInt(); + model->numPolygons = 0; + model->polygons = static_cast( Mem_Alloc16( + model->maxPolygons * sizeof( cm_polygon_t ), MA_CM ) ); + memset( model->polygons, 0, model->maxPolygons * sizeof( cm_polygon_t ) ); + model->maxPolygonEdges = lexer->ParseInt(); + model->numPolygonEdges = 0; + model->polygonEdges = static_cast( Mem_Alloc16( + model->maxPolygonEdges * sizeof( int ), MA_CM ) ); + + lexer->ExpectTokenString( "{" ); + while ( !lexer->CheckTokenString( "}" ) ) { + const int numEdges = lexer->ParseInt(); + cm_polygon_t *polygon = AllocPolygon( model, numEdges ); + memset( polygon, 0, sizeof( *polygon ) ); + polygon->numEdges = numEdges; + polygon->edges = model->polygonEdges + model->numPolygonEdges - numEdges; + + lexer->ExpectTokenString( "(" ); + for ( int i = 0; i < numEdges; ++i ) { + polygon->edges[i] = lexer->ParseInt(); + } + lexer->ExpectTokenString( ")" ); + lexer->Parse1DMatrix( 3, normal.ToFloatPtr() ); + polygon->plane.SetNormal( normal ); + polygon->plane.SetDist( lexer->ParseFloat() ); + lexer->Parse1DMatrix( 3, polygon->bounds[0].ToFloatPtr() ); + lexer->Parse1DMatrix( 3, polygon->bounds[1].ToFloatPtr() ); + lexer->ExpectTokenType( TT_STRING, 0, &token ); + polygon->material = declManager->FindMaterial( token.c_str() ); + polygon->contents = polygon->material->GetContentFlags(); + polygon->texBounds[0].Zero(); + polygon->texBounds[1].Zero(); + polygon->texBounds[2].Zero(); + polygon->primitiveNum = 0; + + if ( lexer->ReadToken( &token ) ) { + lexer->UnreadToken( &token ); + if ( token == "(" ) { + lexer->Parse1DMatrix( 2, polygon->texBounds[0].ToFloatPtr() ); + lexer->Parse1DMatrix( 2, polygon->texBounds[1].ToFloatPtr() ); + lexer->Parse1DMatrix( 2, polygon->texBounds[2].ToFloatPtr() ); + polygon->primitiveNum = lexer->ParseInt(); + } + } + polygon->checkcount = 0; + R_FilterPolygonIntoTree( model, model->node, NULL, polygon ); + } +} + +void idCollisionModelManagerLocal::ParseBrushes( Lexer *lexer, idCollisionModelLocal *model ) { + idToken token; + idVec3 normal; + + model->maxBrushes = lexer->ParseInt(); + model->numBrushes = 0; + model->brushes = static_cast( Mem_Alloc16( + model->maxBrushes * sizeof( cm_brush_t ), MA_CM ) ); + memset( model->brushes, 0, model->maxBrushes * sizeof( cm_brush_t ) ); + model->maxBrushPlanes = lexer->ParseInt(); + model->numBrushPlanes = 0; + model->brushPlanes = static_cast( Mem_Alloc16( + model->maxBrushPlanes * sizeof( idPlane ), MA_CM ) ); + + lexer->ExpectTokenString( "{" ); + while ( !lexer->CheckTokenString( "}" ) ) { + const int numPlanes = lexer->ParseInt(); + cm_brush_t *brush = AllocBrush( model, numPlanes ); + memset( brush, 0, sizeof( *brush ) ); + brush->numPlanes = numPlanes; + brush->planes = model->brushPlanes + model->numBrushPlanes - numPlanes; + + lexer->ExpectTokenString( "{" ); + for ( int i = 0; i < numPlanes; ++i ) { + lexer->Parse1DMatrix( 3, normal.ToFloatPtr() ); + brush->planes[i].SetNormal( normal ); + brush->planes[i].SetDist( lexer->ParseFloat() ); + } + lexer->ExpectTokenString( "}" ); + lexer->Parse1DMatrix( 3, brush->bounds[0].ToFloatPtr() ); + lexer->Parse1DMatrix( 3, brush->bounds[1].ToFloatPtr() ); + lexer->ReadToken( &token ); + if ( token.type == TT_NUMBER ) { + brush->contents = token.GetIntValue(); + brush->primitiveNum = 0; + } else { + brush->contents = ContentsFromString( token.c_str() ); + brush->primitiveNum = lexer->ParseInt(); + } + brush->material = NULL; + brush->checkcount = 0; + R_FilterBrushIntoTree( model, model->node, NULL, brush ); + } +} + bool idCollisionModelManagerLocal::ParseCollisionModel( Lexer *lexer, const char *filename, unsigned int mapFileCRC ) { - return false; + idToken token; + lexer->ExpectTokenType( TT_STRING, 0, &token ); + + idStr fullName = token.c_str(); + if ( filename != NULL && idStr::IcmpnPath( filename, "maps/", 5 ) == 0 ) { + idStr mapBase = filename; + mapBase.StripFileExtension(); + fullName = mapBase + "/" + token.c_str(); + } + + idCollisionModelLocal *model = FindModel( fullName.c_str() ); + if ( model != NULL ) { + FreeModelMemory( model ); + } else { + model = AllocModel(); + models.Append( model ); + } + model->name = fullName; + model->fileTime = mapFileCRC; + model->refCount = 0; + lexer->ExpectTokenType( TT_NUMBER, 0, &token ); + model->numPrimitives = token.GetIntValue(); + + lexer->ExpectTokenString( "{" ); + while ( !lexer->CheckTokenString( "}" ) ) { + lexer->ReadToken( &token ); + if ( token == "vertices" ) { + ParseVertices( lexer, model ); + } else if ( token == "edges" ) { + ParseEdges( lexer, model ); + } else if ( token == "nodes" ) { + lexer->ExpectTokenString( "{" ); + model->node = ParseNodes( lexer, model, NULL ); + lexer->ExpectTokenString( "}" ); + } else if ( token == "polygons" ) { + ParsePolygons( lexer, model ); + } else if ( token == "brushes" ) { + ParseBrushes( lexer, model ); + } else { + lexer->Error( "ParseCollisionModel: bad token \"%s\"", token.c_str() ); + } + } + + ++checkCount; + CalculateEdgeNormals( model, model->node ); + CM_GetNodeBounds( &model->bounds, model->node ); + model->contents = CM_GetNodeContents( model->node ); + model->usedMemory = CM_GetModelMemory( model ); + return true; } bool idCollisionModelManagerLocal::LoadCollisionModelFile( const char *filename, unsigned int mapFileCRC ) { - return false; + idStr fileName = filename; + fileName.SetFileExtension( CM_FILE_EXT ); + idAutoPtr lexer( LexerFactory::MakeLexer( fileName.c_str(), + LEXFL_NOSTRINGCONCAT | LEXFL_NODOLLARPRECOMPILE, false ) ); + if ( !lexer->IsLoaded() ) { + return false; + } + + idToken token; + if ( !lexer->ExpectTokenString( CM_FILEID ) ) { + common->Warning( "%s is not a CM file", fileName.c_str() ); + return false; + } + if ( !lexer->ReadToken( &token ) || token != CM_FILEVERSION ) { + common->Warning( "%s has version %s instead of %s", fileName.c_str(), token.c_str(), CM_FILEVERSION ); + return false; + } + if ( !lexer->ExpectTokenType( TT_NUMBER, TT_INTEGER, &token ) ) { + common->Warning( "%s has no map file CRC", fileName.c_str() ); + return false; + } + const unsigned int crc = token.GetUnsignedLongValue(); + if ( mapFileCRC != 0 && crc != mapFileCRC ) { + common->Printf( "%s is out of date\n", fileName.c_str() ); + return false; + } + + while ( lexer->ReadToken( &token ) ) { + if ( token != "collisionModel" ) { + lexer->Error( "idCollisionModelManagerLocal::LoadCollisionModelFile: bad token \"%s\"", token.c_str() ); + return false; + } + if ( !ParseCollisionModel( lexer, filename, mapFileCRC ) ) { + return false; + } + } + return true; } #else diff --git a/src/cm/collisionmodel_load.cpp b/src/cm/collisionmodel_load.cpp index 64588c9..452c194 100644 --- a/src/cm/collisionmodel_load.cpp +++ b/src/cm/collisionmodel_load.cpp @@ -303,6 +303,89 @@ void idCollisionModelManagerLocal::RemapBrushReferences_r( cm_node_t *node, cm_b } } +static bool CM_R_InsideAllChildren( cm_node_t *node, const idBounds &bounds ) { + if ( node->planeType == -1 ) { + return true; + } + const int axis = node->planeType; + return bounds[0][axis] < node->planeDist && + bounds[1][axis] > node->planeDist && + CM_R_InsideAllChildren( node->children[0], bounds ) && + CM_R_InsideAllChildren( node->children[1], bounds ); +} + +void idCollisionModelManagerLocal::R_FilterPolygonIntoTree( idCollisionModelLocal *model, + cm_node_t *node, cm_polygonRef_t *pref, cm_polygon_t *polygon ) { + while ( node->planeType != -1 ) { + const int axis = node->planeType; + if ( polygon->bounds[0][axis] < node->planeDist && + polygon->bounds[1][axis] > node->planeDist && + CM_R_InsideAllChildren( node->children[0], polygon->bounds ) && + CM_R_InsideAllChildren( node->children[1], polygon->bounds ) ) { + break; + } + if ( polygon->bounds[0][axis] >= node->planeDist ) { + node = node->children[0]; + continue; + } + if ( polygon->bounds[1][axis] <= node->planeDist ) { + node = node->children[1]; + continue; + } + R_FilterPolygonIntoTree( model, node->children[1], NULL, polygon ); + node = node->children[0]; + } + + if ( pref != NULL ) { + pref->next = node->polygons; + node->polygons = pref; + return; + } + + cm_polygonRef_t *ref = AllocPolygonReference( model, + model->numPolygonRefs < REFERENCE_BLOCK_SIZE_SMALL ? REFERENCE_BLOCK_SIZE_SMALL : REFERENCE_BLOCK_SIZE_LARGE ); + ref->p = polygon; + ref->next = node->polygons; + node->polygons = ref; + ++model->numPolygonRefs; +} + +void idCollisionModelManagerLocal::R_FilterBrushIntoTree( idCollisionModelLocal *model, + cm_node_t *node, cm_brushRef_t *pref, cm_brush_t *brush ) { + while ( node->planeType != -1 ) { + const int axis = node->planeType; + if ( brush->bounds[0][axis] < node->planeDist && + brush->bounds[1][axis] > node->planeDist && + CM_R_InsideAllChildren( node->children[0], brush->bounds ) && + CM_R_InsideAllChildren( node->children[1], brush->bounds ) ) { + break; + } + if ( brush->bounds[0][axis] >= node->planeDist ) { + node = node->children[0]; + continue; + } + if ( brush->bounds[1][axis] <= node->planeDist ) { + node = node->children[1]; + continue; + } + R_FilterBrushIntoTree( model, node->children[1], NULL, brush ); + node = node->children[0]; + } + + if ( pref != NULL ) { + pref->next = node->brushes; + node->brushes = pref; + return; + } + + cm_brushRef_t *ref = AllocBrushReference( model, + model->numBrushRefs < REFERENCE_BLOCK_SIZE_SMALL ? REFERENCE_BLOCK_SIZE_SMALL : REFERENCE_BLOCK_SIZE_LARGE ); + ref->b = brush; + ref->next = node->brushes; + node->brushes = ref; + ++model->numBrushRefs; +} + void CM_R_GetNodeBounds( idBounds *bounds, cm_node_t *node ) { while ( true ) { for ( cm_polygonRef_t *ref = node->polygons; ref != NULL; ref = ref->next ) { diff --git a/src/cm/collisionmodel_translate.cpp b/src/cm/collisionmodel_translate.cpp index 8f0b224..3d233bd 100644 --- a/src/cm/collisionmodel_translate.cpp +++ b/src/cm/collisionmodel_translate.cpp @@ -40,32 +40,6 @@ CollisionModel_translate.obj source owner identified by quake4.pdb. #include "CollisionModel_local.h" -void idCollisionModelManagerLocal::SetupTrm( cm_traceWork_t *traceWork, const idTraceModel *trm ) { - traceWork->numVerts = trm->numVerts; - for ( int i = 0; i < trm->numVerts; i++ ) { - traceWork->vertices[i].p = trm->verts[i]; - traceWork->vertices[i].used = false; - } - - traceWork->numEdges = trm->numEdges; - for ( int i = 1; i <= trm->numEdges; i++ ) { - traceWork->edges[i].vertexNum[0] = trm->edges[i].v[0]; - traceWork->edges[i].vertexNum[1] = trm->edges[i].v[1]; - traceWork->edges[i].used = false; - } - - traceWork->numPolys = trm->numPolys; - for ( int i = 0; i < trm->numPolys; i++ ) { - traceWork->polys[i].numEdges = trm->polys[i].numEdges; - for ( int j = 0; j < trm->polys[i].numEdges; j++ ) { - traceWork->polys[i].edges[j] = trm->polys[i].edges[j]; - } - traceWork->polys[i].plane.SetNormal( trm->polys[i].normal ); - traceWork->polys[i].used = false; - } - traceWork->isConvex = trm->isConvex; -} - void idCollisionModelManagerLocal::CM_GetCollisionPointTexCoords( idVec2 &texCoord, cm_traceWork_t *traceWork, cm_polygon_t *polygon ) { texCoord.Set( 0.5f, 0.5f ); @@ -103,51 +77,11 @@ void idCollisionModelManagerLocal::CM_GetMaterialType( cm_traceWork_t *traceWork } } -bool idCollisionModelManagerLocal::TranslateTrmThroughPolygon( cm_traceWork_t *tw, cm_polygon_t *polygon ) { - if ( polygon == NULL || polygon->checkcount == checkCount ) { - return false; - } - polygon->checkcount = checkCount; - if ( !( polygon->contents & tw->contents ) || - !tw->traceBounds.IntersectsBounds( polygon->bounds ) || - polygon->plane.Normal() * tw->dir >= 0.0f ) { - return false; - } - - // Find the trace-model support point closest to the polygon plane. - idVec3 support; - for ( int axis = 0; axis < 3; ++axis ) { - support[axis] = polygon->plane[axis] >= 0.0f ? tw->trmBounds[0][axis] : tw->trmBounds[1][axis]; - } - const float supportDistance = support * polygon->plane.Normal(); - const float startDistance = polygon->plane.Distance( tw->start ) + supportDistance; - const float endDistance = polygon->plane.Distance( tw->end ) + supportDistance; - if ( startDistance <= CM_CLIP_EPSILON || endDistance >= startDistance ) { - return false; - } - float fraction = ( startDistance - CM_CLIP_EPSILON ) / ( startDistance - endDistance ); - fraction = idMath::ClampFloat( 0.0f, tw->trace.fraction, fraction ); - const idVec3 contactPoint = tw->start + fraction * tw->dir + support; - const idBounds expanded = polygon->bounds.Expand( CM_BOX_EPSILON ); - if ( !expanded.ContainsPoint( contactPoint ) ) { - return false; - } - - tw->trace.fraction = fraction; - tw->trace.c.normal = polygon->plane.Normal(); - tw->trace.c.dist = polygon->plane.Dist(); - tw->trace.c.contents = polygon->contents; - tw->trace.c.material = polygon->material; - tw->trace.c.type = tw->pointTrace ? CONTACT_TRMVERTEX : CONTACT_EDGE; - tw->trace.c.point = contactPoint; - tw->trace.c.modelFeature = polygon->primitiveNum; - tw->trace.c.trmFeature = 0; - CM_GetMaterialType( tw, polygon ); - if ( tw->getContacts && tw->contacts != NULL && tw->numContacts < tw->maxContacts ) { - tw->contacts[tw->numContacts++] = tw->trace.c; - } - return fraction == 0.0f; -} +#define Q4_CM_OBJECT_TRANSLATION +#define Q4_CM_TRANSLATE_HELPERS_ONLY +#include "collisionmodel_translate_legacy.inc" +#undef Q4_CM_TRANSLATE_HELPERS_ONLY +#undef Q4_CM_OBJECT_TRANSLATION void idCollisionModelManagerLocal::Translation( trace_t *results, const idVec3 &start, const idVec3 &end, const idTraceModel *trm, const idMat3 &trmAxis, @@ -157,6 +91,7 @@ void idCollisionModelManagerLocal::Translation( trace_t *results, const idVec3 & results->fraction = 1.0f; results->endpos = end; results->endAxis = trmAxis; + if ( collisionModel == NULL ) { return; } @@ -165,10 +100,17 @@ void idCollisionModelManagerLocal::Translation( trace_t *results, const idVec3 & collisionModel, modelOrigin, modelAxis ); return; } - const bool pointTrace = trm == NULL || trm->bounds.GetVolume() <= 0.0f; + + const bool pointTrace = trm == NULL || + ( trm->bounds[1].x - trm->bounds[0].x <= 0.0f && + trm->bounds[1].y - trm->bounds[0].y <= 0.0f && + trm->bounds[1].z - trm->bounds[0].z <= 0.0f ); if ( !pointTrace && ( end - start ).LengthSqr() > Square( CM_MAX_TRACE_DIST ) ) { results->fraction = 0.0f; results->endpos = start; + results->endAxis = trmAxis; + results->c.normal.Zero(); + results->c.material = NULL; results->c.point = start; common->Printf( "idCollisionModelManagerLocal::Translation: huge translation\n" ); return; @@ -178,18 +120,20 @@ void idCollisionModelManagerLocal::Translation( trace_t *results, const idVec3 & ALIGN16( cm_traceWork_t tw ); memset( &tw, 0, sizeof( tw ) ); tw.trace.fraction = 1.0f; + tw.trace.c.contents = 0; tw.trace.c.type = CONTACT_NONE; tw.contents = contentMask; tw.model = static_cast( collisionModel ); tw.rotation = false; tw.positionTest = false; - tw.pointTrace = pointTrace; - tw.isConvex = trm == NULL || trm->isConvex; + tw.quickExit = false; tw.getContacts = getContacts; tw.contacts = contacts; tw.maxContacts = maxContacts; + tw.numContacts = 0; tw.start = start - modelOrigin; tw.end = end - modelOrigin; + tw.dir = tw.end - tw.start; idMat3 inverseModelAxis = mat3_identity; const bool modelRotated = modelAxis.IsRotated(); @@ -197,33 +141,143 @@ void idCollisionModelManagerLocal::Translation( trace_t *results, const idVec3 & inverseModelAxis = modelAxis.Transpose(); tw.start *= inverseModelAxis; tw.end *= inverseModelAxis; + tw.dir *= inverseModelAxis; } - tw.dir = tw.end - tw.start; + if ( pointTrace ) { + tw.pointTrace = true; + tw.isConvex = true; tw.trmBounds.Zero(); + for ( int i = 0; i < 3; ++i ) { + tw.traceBounds[0][i] = Min( tw.start[i], tw.end[i] ) - CM_BOX_EPSILON; + tw.traceBounds[1][i] = Max( tw.start[i], tw.end[i] ) + CM_BOX_EPSILON; + tw.trmExtents[i] = CM_BOX_EPSILON; + } + SetupTranslationHeartPlanes( &tw ); + tw.maxDistFromHeartPlane1 = CM_BOX_EPSILON; + tw.maxDistFromHeartPlane2 = CM_BOX_EPSILON; + tw.numVerts = 1; + tw.vertices[0].p = tw.start; + tw.vertices[0].endp = tw.end; + tw.vertices[0].pl.FromRay( tw.start, tw.dir ); + tw.vertices[0].used = true; + tw.numEdges = 0; + tw.numPolys = 0; + TraceThroughModel( &tw ); } else { - idMat3 localTraceAxis = trmAxis; + tw.pointTrace = false; + SetupTrm( &tw, trm ); + + idMat3 trmTransform = trmAxis; if ( modelRotated ) { - localTraceAxis *= inverseModelAxis; + trmTransform *= inverseModelAxis; } - tw.trmBounds.FromTransformedBounds( trm->bounds, vec3_origin, localTraceAxis ); - } - for ( int i = 0; i < 3; ++i ) { - if ( tw.start[i] < tw.end[i] ) { - tw.traceBounds[0][i] = tw.start[i] + tw.trmBounds[0][i] - CM_BOX_EPSILON; - tw.traceBounds[1][i] = tw.end[i] + tw.trmBounds[1][i] + CM_BOX_EPSILON; - } else { - tw.traceBounds[0][i] = tw.end[i] + tw.trmBounds[0][i] - CM_BOX_EPSILON; - tw.traceBounds[1][i] = tw.start[i] + tw.trmBounds[1][i] + CM_BOX_EPSILON; + + // The trace origin follows the transformed trace-model center, while + // vertices remain positioned relative to the caller's physics origin. + const idVec3 traceOrigin = tw.start; + const idVec3 traceEnd = tw.end; + const idVec3 transformedOffset = trm->offset * trmTransform; + tw.start = traceOrigin + transformedOffset; + tw.end = traceEnd + transformedOffset; + + for ( int i = 0; i < tw.numPolys; ++i ) { + tw.polys[i].plane.SetNormal( trm->polys[i].normal * trmTransform ); + const float facing = tw.polys[i].plane.Normal() * tw.dir; + if ( facing > 0.0f || ( !trm->isConvex && facing == 0.0f ) ) { + tw.polys[i].used = true; + for ( int j = 0; j < tw.polys[i].numEdges; ++j ) { + cm_trmEdge_t &edge = tw.edges[abs( tw.polys[i].edges[j] )]; + edge.used = true; + tw.vertices[edge.vertexNum[0]].used = true; + tw.vertices[edge.vertexNum[1]].used = true; + } + } } - tw.trmExtents[i] = Max( idMath::Fabs( tw.trmBounds[0][i] ), - idMath::Fabs( tw.trmBounds[1][i] ) ) + CM_BOX_EPSILON; + + tw.trmBounds.Clear(); + for ( int i = 0; i < tw.numVerts; ++i ) { + cm_trmVertex_t &vertex = tw.vertices[i]; + if ( !vertex.used ) { + continue; + } + vertex.p = trm->verts[i] * trmTransform + traceOrigin; + vertex.endp = vertex.p + tw.dir; + vertex.pl.FromRay( vertex.p, tw.dir ); + tw.trmBounds.AddPoint( vertex.p - tw.start ); + } + + for ( int i = 1; i <= tw.numEdges; ++i ) { + cm_trmEdge_t &edge = tw.edges[i]; + if ( !edge.used ) { + continue; + } + const idVec3 &edgeStart = tw.vertices[edge.vertexNum[0]].p; + const idVec3 &edgeEnd = tw.vertices[edge.vertexNum[1]].p; + edge.pl.FromLine( edgeStart, edgeEnd ); + const idVec3 edgeDir = edgeStart - edgeEnd; + edge.cross[0] = edgeDir[0] * tw.dir[1] - edgeDir[1] * tw.dir[0]; + edge.cross[1] = edgeDir[0] * tw.dir[2] - edgeDir[2] * tw.dir[0]; + edge.cross[2] = edgeDir[1] * tw.dir[2] - edgeDir[2] * tw.dir[1]; + edge.bitNum = static_cast( i ); + } + + for ( int i = 0; i < tw.numPolys; ++i ) { + cm_trmPolygon_t &polygon = tw.polys[i]; + if ( polygon.used ) { + const cm_trmEdge_t &edge = tw.edges[abs( polygon.edges[0] )]; + polygon.plane.FitThroughPoint( tw.vertices[edge.vertexNum[0]].p ); + } + } + + for ( int i = 0; i < 3; ++i ) { + tw.traceBounds[0][i] = Min( tw.start[i], tw.end[i] ) + tw.trmBounds[0][i] - CM_BOX_EPSILON; + tw.traceBounds[1][i] = Max( tw.start[i], tw.end[i] ) + tw.trmBounds[1][i] + CM_BOX_EPSILON; + tw.trmExtents[i] = Max( idMath::Fabs( tw.trmBounds[0][i] ), + idMath::Fabs( tw.trmBounds[1][i] ) ) + CM_BOX_EPSILON; + } + + SetupTranslationHeartPlanes( &tw ); + tw.maxDistFromHeartPlane1 = 0.0f; + tw.maxDistFromHeartPlane2 = 0.0f; + for ( int i = 0; i < tw.numVerts; ++i ) { + if ( !tw.vertices[i].used ) { + continue; + } + tw.maxDistFromHeartPlane1 = Max( tw.maxDistFromHeartPlane1, + idMath::Fabs( tw.heartPlane1.Distance( tw.vertices[i].p ) ) ); + tw.maxDistFromHeartPlane2 = Max( tw.maxDistFromHeartPlane2, + idMath::Fabs( tw.heartPlane2.Distance( tw.vertices[i].p ) ) ); + } + tw.maxDistFromHeartPlane1 += CM_BOX_EPSILON; + tw.maxDistFromHeartPlane2 += CM_BOX_EPSILON; + TraceThroughModel( &tw ); } - TraceThroughModel( &tw ); + + if ( tw.getContacts ) { + if ( modelRotated ) { + for ( int i = 0; i < tw.numContacts; ++i ) { + tw.contacts[i].normal *= modelAxis; + tw.contacts[i].point *= modelAxis; + } + } + if ( modelOrigin != vec3_origin ) { + for ( int i = 0; i < tw.numContacts; ++i ) { + tw.contacts[i].point += modelOrigin; + tw.contacts[i].dist += modelOrigin * tw.contacts[i].normal; + } + } + numContacts = tw.numContacts; + return; + } + *results = tw.trace; results->endpos = start + results->fraction * ( end - start ); - results->endAxis = trmAxis; + results->endAxis = pointTrace ? mat3_identity : trmAxis; if ( results->fraction < 1.0f ) { + if ( results->fraction > 0.0f && results->endpos.Compare( start ) ) { + results->fraction = 0.0f; + } if ( modelRotated ) { results->c.normal *= modelAxis; results->c.point *= modelAxis; @@ -231,7 +285,6 @@ void idCollisionModelManagerLocal::Translation( trace_t *results, const idVec3 & results->c.point += modelOrigin; results->c.dist += modelOrigin * results->c.normal; } - numContacts = tw.numContacts; } #endif diff --git a/src/cm/collisionmodel_translate_legacy.inc b/src/cm/collisionmodel_translate_legacy.inc index febf740..fc86299 100644 --- a/src/cm/collisionmodel_translate_legacy.inc +++ b/src/cm/collisionmodel_translate_legacy.inc @@ -30,10 +30,22 @@ along with Quake 4 Reconstructed Source Code. If not, see traceBounds ) +#define CM_TRM_BOUNDS( tw ) ( (tw)->trmBounds ) +#else +#define CM_MANAGER_CHECKCOUNT idCollisionModelManagerLocal::checkCount +#define CM_TRACE_BOUNDS( tw ) ( (tw)->bounds ) +#define CM_TRM_BOUNDS( tw ) ( (tw)->size ) +#endif /* =============================================================================== @@ -239,7 +251,7 @@ void idCollisionModelManagerLocal::TranslateTrmEdgeThroughPolygon( cm_traceWork_ edgeNum = poly->edges[i]; edge = tw->model->edges + abs(edgeNum); // if this edge is already checked - if ( edge->checkcount == idCollisionModelManagerLocal::checkCount ) { + if ( edge->checkcount == CM_MANAGER_CHECKCOUNT ) { continue; } // can never collide with internal edges @@ -293,12 +305,14 @@ void idCollisionModelManagerLocal::TranslateTrmEdgeThroughPolygon( cm_traceWork_ // create plane with normal vector orthogonal to both the polygon edge and the trm edge start = tw->model->vertices[edge->vertexNum[0]].p; end = tw->model->vertices[edge->vertexNum[1]].p; - tw->trace.c.normal = ( end - start ).Cross( trmEdge->end - trmEdge->start ); + const idVec3 &trmStart = tw->vertices[trmEdge->vertexNum[0]].p; + const idVec3 &trmEnd = tw->vertices[trmEdge->vertexNum[1]].p; + tw->trace.c.normal = ( end - start ).Cross( trmEnd - trmStart ); // FIXME: do this normalize when we know the first collision tw->trace.c.normal.Normalize(); tw->trace.c.dist = tw->trace.c.normal * start; // make sure the collision plane faces the trace model - if ( tw->trace.c.normal * trmEdge->start - tw->trace.c.dist < 0.0f ) { + if ( tw->trace.c.normal * trmStart - tw->trace.c.dist < 0.0f ) { tw->trace.c.normal = -tw->trace.c.normal; tw->trace.c.dist = -tw->trace.c.dist; } @@ -311,7 +325,7 @@ void idCollisionModelManagerLocal::TranslateTrmEdgeThroughPolygon( cm_traceWork_ normal[0] = trmEdge->cross[2]; normal[1] = -trmEdge->cross[1]; normal[2] = trmEdge->cross[0]; - dist = normal * trmEdge->start; + dist = normal * trmStart; d1 = normal * start - dist; d2 = normal * end - dist; f1 = d1 / ( d1 - d2 ); @@ -445,9 +459,9 @@ void idCollisionModelManagerLocal::TranslatePointThroughPolygon( cm_traceWork_t edgeNum = poly->edges[i]; edge = tw->model->edges + abs(edgeNum); // if we didn't yet calculate the sidedness for this edge - if ( edge->checkcount != idCollisionModelManagerLocal::checkCount ) { + if ( edge->checkcount != CM_MANAGER_CHECKCOUNT ) { float fl; - edge->checkcount = idCollisionModelManagerLocal::checkCount; + edge->checkcount = CM_MANAGER_CHECKCOUNT; pl.FromLine(tw->model->vertices[edge->vertexNum[0]].p, tw->model->vertices[edge->vertexNum[1]].p); fl = v->pl.PermutedInnerProduct( pl ); edge->side = FLOATSIGNBITSET(fl); @@ -541,10 +555,10 @@ bool idCollisionModelManagerLocal::TranslateTrmThroughPolygon( cm_traceWork_t *t cm_edge_t *e; // if already checked this polygon - if ( p->checkcount == idCollisionModelManagerLocal::checkCount ) { + if ( p->checkcount == CM_MANAGER_CHECKCOUNT ) { return false; } - p->checkcount = idCollisionModelManagerLocal::checkCount; + p->checkcount = CM_MANAGER_CHECKCOUNT; // if this polygon does not have the right contents behind it if ( !(p->contents & tw->contents) ) { @@ -552,7 +566,7 @@ bool idCollisionModelManagerLocal::TranslateTrmThroughPolygon( cm_traceWork_t *t } // if the the trace bounds do not intersect the polygon bounds - if ( !tw->bounds.IntersectsBounds( p->bounds ) ) { + if ( !CM_TRACE_BOUNDS( tw ).IntersectsBounds( p->bounds ) ) { return false; } @@ -581,7 +595,7 @@ bool idCollisionModelManagerLocal::TranslateTrmThroughPolygon( cm_traceWork_t *t else { // trace bounds should cross polygon plane - switch ( tw->bounds.PlaneSide( p->plane ) ) { + switch ( CM_TRACE_BOUNDS( tw ).PlaneSide( p->plane ) ) { case PLANESIDE_CROSS: break; case PLANESIDE_FRONT: @@ -598,7 +612,7 @@ bool idCollisionModelManagerLocal::TranslateTrmThroughPolygon( cm_traceWork_t *t edgeNum = p->edges[i]; e = tw->model->edges + abs(edgeNum); // reset sidedness cache if this is the first time we encounter this edge during this trace - if ( e->checkcount != idCollisionModelManagerLocal::checkCount ) { + if ( e->checkcount != CM_MANAGER_CHECKCOUNT ) { e->sideSet = 0; } // pluecker coordinate for edge @@ -607,7 +621,7 @@ bool idCollisionModelManagerLocal::TranslateTrmThroughPolygon( cm_traceWork_t *t v = &tw->model->vertices[e->vertexNum[INTSIGNBITSET(edgeNum)]]; // reset sidedness cache if this is the first time we encounter this vertex during this trace - if ( v->checkcount != idCollisionModelManagerLocal::checkCount ) { + if ( v->checkcount != CM_MANAGER_CHECKCOUNT ) { v->sideSet = 0; } // pluecker coordinate for vertex movement vector @@ -637,11 +651,11 @@ bool idCollisionModelManagerLocal::TranslateTrmThroughPolygon( cm_traceWork_t *t edgeNum = p->edges[i]; e = tw->model->edges + abs(edgeNum); - if ( e->checkcount == idCollisionModelManagerLocal::checkCount ) { + if ( e->checkcount == CM_MANAGER_CHECKCOUNT ) { continue; } // set edge check count - e->checkcount = idCollisionModelManagerLocal::checkCount; + e->checkcount = CM_MANAGER_CHECKCOUNT; // can never collide with internal edges if ( e->internal ) { continue; @@ -651,14 +665,14 @@ bool idCollisionModelManagerLocal::TranslateTrmThroughPolygon( cm_traceWork_t *t v = tw->model->vertices + e->vertexNum[k ^ INTSIGNBITSET(edgeNum)]; // if this vertex is already checked - if ( v->checkcount == idCollisionModelManagerLocal::checkCount ) { + if ( v->checkcount == CM_MANAGER_CHECKCOUNT ) { continue; } // set vertex check count - v->checkcount = idCollisionModelManagerLocal::checkCount; + v->checkcount = CM_MANAGER_CHECKCOUNT; // if the vertex is outside the trace bounds - if ( !tw->bounds.ContainsPoint( v->p ) ) { + if ( !CM_TRACE_BOUNDS( tw ).ContainsPoint( v->p ) ) { continue; } @@ -684,12 +698,12 @@ bool idCollisionModelManagerLocal::TranslateTrmThroughPolygon( cm_traceWork_t *t // decrease bounds for ( i = 0; i < 3; i++ ) { if ( tw->start[i] < endp[i] ) { - tw->bounds[0][i] = tw->start[i] + tw->size[0][i] - CM_BOX_EPSILON; - tw->bounds[1][i] = endp[i] + tw->size[1][i] + CM_BOX_EPSILON; + CM_TRACE_BOUNDS( tw )[0][i] = tw->start[i] + CM_TRM_BOUNDS( tw )[0][i] - CM_BOX_EPSILON; + CM_TRACE_BOUNDS( tw )[1][i] = endp[i] + CM_TRM_BOUNDS( tw )[1][i] + CM_BOX_EPSILON; } else { - tw->bounds[0][i] = endp[i] + tw->size[0][i] - CM_BOX_EPSILON; - tw->bounds[1][i] = tw->start[i] + tw->size[1][i] + CM_BOX_EPSILON; + CM_TRACE_BOUNDS( tw )[0][i] = endp[i] + CM_TRM_BOUNDS( tw )[0][i] - CM_BOX_EPSILON; + CM_TRACE_BOUNDS( tw )[1][i] = tw->start[i] + CM_TRM_BOUNDS( tw )[1][i] + CM_BOX_EPSILON; } } } @@ -755,6 +769,8 @@ void idCollisionModelManagerLocal::SetupTranslationHeartPlanes( cm_traceWork_t * idCollisionModelManagerLocal::Translation ================ */ +#if !defined( Q4_CM_TRANSLATE_HELPERS_ONLY ) + #ifdef _DEBUG static int entered = 0; #endif @@ -1114,3 +1130,9 @@ void idCollisionModelManagerLocal::Translation( trace_t *results, const idVec3 & } #endif } + +#endif // !Q4_CM_TRANSLATE_HELPERS_ONLY + +#undef CM_MANAGER_CHECKCOUNT +#undef CM_TRACE_BOUNDS +#undef CM_TRM_BOUNDS diff --git a/src/engine/CMakeLists.txt b/src/engine/CMakeLists.txt index bbfebc8..96e6947 100644 --- a/src/engine/CMakeLists.txt +++ b/src/engine/CMakeLists.txt @@ -42,6 +42,12 @@ set(Q4_CM_TRANSLATE_SOURCE ${PROJECT_SOURCE_DIR}/cm/collisionmodel_translate.cpp list(REMOVE_ITEM Q4_CM_SOURCES ${Q4_CM_MODEL_SOURCE}) file(GLOB Q4_FRAMEWORK_TOP_SOURCES CONFIGURE_DEPENDS ${PROJECT_SOURCE_DIR}/framework/*.cpp) +set(Q4_FRAMEWORK_PLAYER_MODEL_SOURCE ${PROJECT_SOURCE_DIR}/framework/DeclPlayerModel.cpp) +set(Q4_FRAMEWORK_ENGINE_TOP_SOURCES ${Q4_FRAMEWORK_TOP_SOURCES}) +# DeclPlayerModel is owned by gamex86.dll in the retail PDB. Keep it out of +# q4xp.exe so the reconstructed compiland and its allocator live in the same +# module that registers DECL_PLAYER_MODEL. +list(REMOVE_ITEM Q4_FRAMEWORK_ENGINE_TOP_SOURCES ${Q4_FRAMEWORK_PLAYER_MODEL_SOURCE}) set(Q4_FRAMEWORK_SESSION_SOURCES ${PROJECT_SOURCE_DIR}/framework/common.cpp ${PROJECT_SOURCE_DIR}/framework/session.cpp @@ -58,8 +64,11 @@ set(Q4_FRAMEWORK_CONSOLE_SOURCES file(GLOB Q4_FRAMEWORK_ASYNC_SOURCES CONFIGURE_DEPENDS ${PROJECT_SOURCE_DIR}/framework/async/*.cpp) set(Q4_FRAMEWORK_MSGCHANNEL_SOURCE ${PROJECT_SOURCE_DIR}/framework/async/msgchannel.cpp) list(REMOVE_ITEM Q4_FRAMEWORK_ASYNC_SOURCES ${Q4_FRAMEWORK_MSGCHANNEL_SOURCE}) -set(Q4_FRAMEWORK_CORE_SOURCES ${Q4_FRAMEWORK_TOP_SOURCES}) -list(REMOVE_ITEM Q4_FRAMEWORK_CORE_SOURCES ${Q4_FRAMEWORK_SESSION_SOURCES} ${Q4_FRAMEWORK_CONSOLE_SOURCES}) +set(Q4_FRAMEWORK_CORE_SOURCES ${Q4_FRAMEWORK_ENGINE_TOP_SOURCES}) +list(REMOVE_ITEM Q4_FRAMEWORK_CORE_SOURCES + ${Q4_FRAMEWORK_SESSION_SOURCES} + ${Q4_FRAMEWORK_CONSOLE_SOURCES} +) file(GLOB_RECURSE Q4_UI_SOURCES CONFIGURE_DEPENDS ${PROJECT_SOURCE_DIR}/ui/*.cpp @@ -357,7 +366,7 @@ add_executable(q4xp WIN32 ${Q4_AAS_SOURCES} ${Q4_CM_MODEL_SOURCE} ${Q4_CM_SOURCES} - ${Q4_FRAMEWORK_TOP_SOURCES} + ${Q4_FRAMEWORK_ENGINE_TOP_SOURCES} ${Q4_FRAMEWORK_ASYNC_SOURCES} ${Q4_FRAMEWORK_MSGCHANNEL_SOURCE} ${Q4_UI_SOURCES} @@ -388,6 +397,7 @@ target_compile_definitions(q4xp PRIVATE WIN32 _WINDOWS _LOAD_DLL + __DOOM_DLL__ _USE_32BIT_TIME_T Q4_NO_PUNKBUSTER Q4_RECON_SEED @@ -429,6 +439,7 @@ if(MSVC) /DEBUG:FULL /PDB:E:/projects/Quake4Alpha/q4xp.pdb /MAP:E:/projects/Quake4Alpha/q4xp.map + /STACK:16777216,4096 ) endif() diff --git a/src/framework/Session_local.h b/src/framework/Session_local.h index 122aec1..7b9e547 100644 --- a/src/framework/Session_local.h +++ b/src/framework/Session_local.h @@ -190,11 +190,7 @@ public: static idCVar gui_configServerRate; int timeHitch; - idRenderWorld * rw; int sw; - idDemoFile * readDemo; - idDemoFile * writeDemo; - int renderdemoVersion; bool menuActive; int menuSoundWorld; // SOUNDWORLD_MENU in Quake 4's id-based sound API @@ -310,14 +306,14 @@ public: void RunGameTic(); void FinishCmdLoad(); - void LoadLoadingGui(const char *mapName); + void LoadLoadingGui( const char *mapName, const char *entityFilter ); void DemoShot( const char *name ); void TestGUI( const char *name ); - int GetBytesNeededForMapLoad( const char *mapName ); - void SetBytesNeededForMapLoad( const char *mapName, int bytesNeeded ); + int GetBytesNeededForMapLoad( const char *mapName, const char *entityFilter ); + void SetBytesNeededForMapLoad( const char *mapName, const char *entityFilter, int bytesNeeded ); void ExecuteMapChange( bool noFadeWipe = false ); void UnloadMap(); diff --git a/src/framework/async/NetworkSystem.h b/src/framework/async/NetworkSystem.h index 5318beb..b24f433 100644 --- a/src/framework/async/NetworkSystem.h +++ b/src/framework/async/NetworkSystem.h @@ -89,32 +89,6 @@ class idNetworkSystem { public: virtual ~idNetworkSystem( void ) {} -#ifdef Q4_RECON_ENGINE_PRIVATE - // Interface and ordering recovered from quake4.exe's 24-slot vtable. - virtual void ServerSendReliableMessage( int clientNum, const idBitMsg &msg ); - virtual void ServerSendReliableMessageExcluding( int clientNum, const idBitMsg &msg ); - virtual int ServerGetClientPing( int clientNum ); - virtual int ServerGetClientPrediction( int clientNum ); - virtual int ServerGetClientTimeSinceLastPacket( int clientNum ); - virtual int ServerGetClientTimeSinceLastInput( int clientNum ); - virtual int ServerGetClientOutgoingRate( int clientNum ); - virtual int ServerGetClientIncomingRate( int clientNum ); - virtual float ServerGetClientIncomingPacketLoss( int clientNum ); - virtual void ClientSendReliableMessage( const idBitMsg &msg ); - virtual int ClientGetPrediction( void ); - virtual int ClientGetTimeSinceLastPacket( void ); - virtual int ClientGetOutgoingRate( void ); - virtual int ClientGetIncomingRate( void ); - virtual float ClientGetIncomingPacketLoss( void ); - virtual const char * GetServerAddress( void ); - virtual const char * GetClientAddress( int clientNum ); - virtual void AddFriend( int clientNum ); - virtual void RemoveFriend( int clientNum ); - virtual void SetLoadingText( const char *loadingText ); - virtual void AddLoadingIcon( const char *icon ); - virtual const char * GetClientGUID( int clientNum ); - virtual void GetTrafficStats( int &bytesSent, int &packetsSent, int &bytesReceived, int &packetsReceived ) const; -#else virtual void Shutdown( void ); virtual void ServerSendReliableMessage( int clientNum, const idBitMsg &msg, bool inhibitRepeater = false ); @@ -176,7 +150,6 @@ public: private: scannedServer_t scannedServer; scannedClient_t scannedClient; -#endif }; extern idNetworkSystem * networkSystem; diff --git a/src/framework/async/networksystem.cpp b/src/framework/async/networksystem.cpp index 1b03919..d552813 100644 --- a/src/framework/async/networksystem.cpp +++ b/src/framework/async/networksystem.cpp @@ -33,6 +33,30 @@ idNetworkSystem * networkSystem = &networkSystemLocal; // The retail implementation stores this state in Raven's server-scan object. // Keep the ABI-neutral state here until that UI scanner is reconstructed. static bool networkFriendClients[MAX_ASYNC_CLIENTS]; +static idList networkSortFunctions; +static idList networkActiveSortFunctions; + +static int FindSortFunction( const idList &list, const sortInfo_t &sortInfo ) { + for ( int i = 0; i < list.Num(); i++ ) { + if ( list[i].column == sortInfo.column && + list[i].compareFn == sortInfo.compareFn && + list[i].filterFn == sortInfo.filterFn ) { + return i; + } + } + return -1; +} + +/* +================== +idNetworkSystem::Shutdown +================== +*/ +void idNetworkSystem::Shutdown( void ) { + networkSortFunctions.Clear(); + networkActiveSortFunctions.Clear(); + memset( networkFriendClients, 0, sizeof( networkFriendClients ) ); +} /* @@ -40,18 +64,42 @@ static bool networkFriendClients[MAX_ASYNC_CLIENTS]; idNetworkSystem::ServerSendReliableMessage ================== */ -void idNetworkSystem::ServerSendReliableMessage( int clientNum, const idBitMsg &msg ) { +void idNetworkSystem::ServerSendReliableMessage( int clientNum, const idBitMsg &msg, bool inhibitRepeater ) { + (void)inhibitRepeater; if ( idAsyncNetwork::server.IsActive() ) { idAsyncNetwork::server.SendReliableGameMessage( clientNum, msg ); } } +/* +================== +idNetworkSystem::RepeaterSendReliableMessage +idNetworkSystem::RepeaterSendReliableMessageExcluding +================== +*/ +void idNetworkSystem::RepeaterSendReliableMessage( int clientNum, const idBitMsg &msg, bool inhibitHeader, int including ) { + (void)inhibitHeader; + (void)including; + if ( idAsyncNetwork::server.IsActive() ) { + idAsyncNetwork::server.SendReliableGameMessage( clientNum, msg ); + } +} + +void idNetworkSystem::RepeaterSendReliableMessageExcluding( int excluding, const idBitMsg &msg, bool inhibitHeader, int clientNum ) { + (void)inhibitHeader; + (void)clientNum; + if ( idAsyncNetwork::server.IsActive() ) { + idAsyncNetwork::server.SendReliableGameMessageExcluding( excluding, msg ); + } +} + /* ================== idNetworkSystem::ServerSendReliableMessageExcluding ================== */ -void idNetworkSystem::ServerSendReliableMessageExcluding( int clientNum, const idBitMsg &msg ) { +void idNetworkSystem::ServerSendReliableMessageExcluding( int clientNum, const idBitMsg &msg, bool inhibitRepeater ) { + (void)inhibitRepeater; if ( idAsyncNetwork::server.IsActive() ) { idAsyncNetwork::server.SendReliableGameMessageExcluding( clientNum, msg ); } @@ -69,18 +117,6 @@ int idNetworkSystem::ServerGetClientPing( int clientNum ) { return 0; } -/* -================== -idNetworkSystem::ServerGetClientPrediction -================== -*/ -int idNetworkSystem::ServerGetClientPrediction( int clientNum ) { - if ( idAsyncNetwork::server.IsActive() ) { - return idAsyncNetwork::server.GetClientPrediction( clientNum ); - } - return 0; -} - /* ================== idNetworkSystem::ServerGetClientTimeSinceLastPacket @@ -141,6 +177,32 @@ float idNetworkSystem::ServerGetClientIncomingPacketLoss( int clientNum ) { return 0.0f; } +/* +================== +idNetworkSystem::ServerGetClientNum +idNetworkSystem::ServerGetServerTime +idNetworkSystem::ServerConnectBot +idNetworkSystem::RepeaterGetClientNum +================== +*/ +int idNetworkSystem::ServerGetClientNum( int clientId ) { + // The reconstructed asynchronous server does not expose its private clientId + // table. Local callers pass an already resolved client number. + return ( clientId >= 0 && clientId < MAX_ASYNC_CLIENTS ) ? clientId : -1; +} + +int idNetworkSystem::ServerGetServerTime( void ) { + return common->GetFrameTime(); +} + +int idNetworkSystem::ServerConnectBot( void ) { + return -1; +} + +int idNetworkSystem::RepeaterGetClientNum( int clientId ) { + return ServerGetClientNum( clientId ); +} + /* ================== idNetworkSystem::ClientSendReliableMessage @@ -301,3 +363,100 @@ void idNetworkSystem::GetTrafficStats( int &bytesSent, int &packetsSent, int &by idAsyncNetwork::client.GetTrafficStats( bytesSent, packetsSent, bytesReceived, packetsReceived ); } } + +/* +================== +idNetworkSystem server browser API +================== +*/ +int idNetworkSystem::GetNumScannedServers( void ) { + return idAsyncNetwork::client.serverList.Num(); +} + +const scannedServer_t *idNetworkSystem::GetScannedServerInfo( int serverNum ) { + if ( serverNum < 0 || serverNum >= idAsyncNetwork::client.serverList.Num() ) { + return NULL; + } + + const networkServer_t &source = idAsyncNetwork::client.serverList[serverNum]; + scannedServer.adr = source.adr; + scannedServer.serverInfo = source.serverInfo; + scannedServer.ping = source.ping; + scannedServer.clients = source.clients; + scannedServer.OSMask = source.OSMask; + scannedServer.favorite = false; + scannedServer.dedicated = source.serverInfo.GetBool( "si_dedicated" ); + scannedServer.performanceFiltered = false; + return &scannedServer; +} + +const scannedClient_t *idNetworkSystem::GetScannedServerClientInfo( int serverNum, int clientNum ) { + if ( serverNum < 0 || serverNum >= idAsyncNetwork::client.serverList.Num() ) { + return NULL; + } + + const networkServer_t &source = idAsyncNetwork::client.serverList[serverNum]; + if ( clientNum < 0 || clientNum >= source.clients || clientNum >= MAX_ASYNC_CLIENTS ) { + return NULL; + } + + scannedClient.nickname = source.nickname[clientNum]; + scannedClient.clan.Clear(); + scannedClient.ping = source.pings[clientNum]; + scannedClient.rate = source.rate[clientNum]; + return &scannedClient; +} + +void idNetworkSystem::AddSortFunction( const sortInfo_t &sortInfo ) { + if ( FindSortFunction( networkSortFunctions, sortInfo ) < 0 ) { + networkSortFunctions.Append( sortInfo ); + } +} + +bool idNetworkSystem::RemoveSortFunction( const sortInfo_t &sortInfo ) { + const int activeIndex = FindSortFunction( networkActiveSortFunctions, sortInfo ); + if ( activeIndex >= 0 ) { + networkActiveSortFunctions.RemoveIndex( activeIndex ); + } + const int index = FindSortFunction( networkSortFunctions, sortInfo ); + if ( index < 0 ) { + return false; + } + networkSortFunctions.RemoveIndex( index ); + return true; +} + +void idNetworkSystem::UseSortFunction( const sortInfo_t &sortInfo, bool use ) { + const int index = FindSortFunction( networkActiveSortFunctions, sortInfo ); + if ( use ) { + AddSortFunction( sortInfo ); + if ( index < 0 ) { + networkActiveSortFunctions.Append( sortInfo ); + } + } else if ( index >= 0 ) { + networkActiveSortFunctions.RemoveIndex( index ); + } +} + +bool idNetworkSystem::SortFunctionIsActive( const sortInfo_t &sortInfo ) { + return FindSortFunction( networkActiveSortFunctions, sortInfo ) >= 0; +} + +bool idNetworkSystem::HTTPEnable( bool enable ) { + (void)enable; + return false; +} + +void idNetworkSystem::ClientSetServerInfo( const idDict &serverSI ) { + if ( game != NULL ) { + game->SetServerInfo( serverSI ); + } +} + +void idNetworkSystem::RepeaterSetInfo( const idDict &info ) { + (void)info; +} + +const char *idNetworkSystem::GetViewerGUID( int clientNum ) { + return GetClientGUID( clientNum ); +} diff --git a/src/framework/common.cpp b/src/framework/common.cpp index e962cc7..9c8b280 100644 --- a/src/framework/common.cpp +++ b/src/framework/common.cpp @@ -2815,6 +2815,7 @@ void idCommonLocal::LoadGameDLL( void ) { gameImport.declManager = ::declManager; gameImport.AASFileManager = ::AASFileManager; gameImport.collisionModelManager = ::collisionModelManager; + gameImport.bse = ::bse; gameExport = *GetGameAPI( &gameImport ); diff --git a/src/framework/console.cpp b/src/framework/console.cpp index 988fde6..68e6b81 100644 --- a/src/framework/console.cpp +++ b/src/framework/console.cpp @@ -439,7 +439,7 @@ void idConsoleLocal::Clear() { int i; for ( i = 0 ; i < CON_TEXTSIZE ; i++ ) { - text[i] = (idStr::ColorIndex(C_COLOR_CYAN)<<8) | ' '; + text[i] = (idStr::ColorIndex(C_COLOR_CONSOLE)<<8) | ' '; } Bottom(); // go to end @@ -830,7 +830,7 @@ void idConsoleLocal::Linefeed() { } current++; for ( i = 0; i < LINE_WIDTH; i++ ) { - text[(current%TOTAL_LINES)*LINE_WIDTH+i] = (idStr::ColorIndex(C_COLOR_CYAN)<<8) | ' '; + text[(current%TOTAL_LINES)*LINE_WIDTH+i] = (idStr::ColorIndex(C_COLOR_CONSOLE)<<8) | ' '; } } @@ -855,7 +855,7 @@ void idConsoleLocal::Print( const char *txt ) { } #endif - color = idStr::ColorIndex( C_COLOR_CYAN ); + color = idStr::ColorIndex( C_COLOR_CONSOLE ); while ( (c = *(const unsigned char*)txt) != 0 ) { int escapeType; @@ -866,7 +866,7 @@ void idConsoleLocal::Print( const char *txt ) { continue; } if ( *( txt + 1 ) == C_COLOR_DEFAULT ) { - color = idStr::ColorIndex( C_COLOR_CYAN ); + color = idStr::ColorIndex( C_COLOR_CONSOLE ); } else { color = idStr::ColorIndex( *( txt + 1 ) ); } @@ -963,7 +963,7 @@ void idConsoleLocal::DrawInput() { } } - renderSystem->SetColor( idStr::ColorForIndex( C_COLOR_CYAN ) ); + renderSystem->SetColor( idStr::ColorForIndex( C_COLOR_CONSOLE ) ); renderSystem->DrawSmallChar( 1 * SMALLCHAR_WIDTH, y, ']', localConsole.charSetShader ); @@ -1021,7 +1021,7 @@ void idConsoleLocal::DrawNotify() { v += SMALLCHAR_HEIGHT; } - renderSystem->SetColor( colorCyan ); + renderSystem->SetColor( idStr::ColorForIndex( C_COLOR_CONSOLE ) ); } /* @@ -1057,13 +1057,15 @@ void idConsoleLocal::DrawSolidConsole( float frac ) { renderSystem->DrawStretchPic( 0, 0, SCREEN_WIDTH, y, 0, 1.0f - displayFrac, 1, 1, consoleShader ); } - renderSystem->SetColor( colorCyan ); + renderSystem->SetColor( idStr::ColorForIndex( C_COLOR_CONSOLE ) ); renderSystem->DrawStretchPic( 0, y, SCREEN_WIDTH, 2, 0, 0, 0, 0, whiteShader ); renderSystem->SetColor( colorWhite ); // draw the version number - renderSystem->SetColor( idStr::ColorForIndex( C_COLOR_CYAN ) ); + idVec4 versionColor = colorWhite; + versionColor.w = 0.5f; + renderSystem->SetColor( versionColor ); idStr version = va( "%s %s %s V%s Build %u", "GSS_TEXT_NAME", "Quake4", "Release", "0.13.0.7", 1834u ); i = version.Length(); @@ -1084,7 +1086,7 @@ void idConsoleLocal::DrawSolidConsole( float frac ) { // draw from the bottom up if ( display != current ) { // draw arrows to show the buffer is backscrolled - renderSystem->SetColor( idStr::ColorForIndex( C_COLOR_CYAN ) ); + renderSystem->SetColor( idStr::ColorForIndex( C_COLOR_CONSOLE ) ); for ( x = 0; x < LINE_WIDTH; x += 4 ) { renderSystem->DrawSmallChar( (x+1)*SMALLCHAR_WIDTH, idMath::FtoiFast( y ), '^', localConsole.charSetShader ); } @@ -1128,7 +1130,7 @@ void idConsoleLocal::DrawSolidConsole( float frac ) { // draw the input prompt, user text, and cursor if desired DrawInput(); - renderSystem->SetColor( colorCyan ); + renderSystem->SetColor( idStr::ColorForIndex( C_COLOR_CONSOLE ) ); } diff --git a/src/framework/declManager.h b/src/framework/declManager.h index d2dff6d..8f3ac50 100644 --- a/src/framework/declManager.h +++ b/src/framework/declManager.h @@ -63,37 +63,40 @@ along with Quake 4 Reconstructed Source Code. If not, see ); RegisterDeclType( "lipSync", DECL_LIPSYNC, idDeclAllocator ); RegisterDeclType( "playback", DECL_PLAYBACK, idDeclAllocator ); + RegisterDeclType( "effect", DECL_EFFECT, idDeclAllocator ); RegisterDeclType( "articulatedFigure", DECL_AF, idDeclAllocator ); RegisterDeclType( "pda", DECL_PDA, idDeclAllocator ); RegisterDeclType( "email", DECL_EMAIL, idDeclAllocator ); RegisterDeclType( "video", DECL_VIDEO, idDeclAllocator ); RegisterDeclType( "audio", DECL_AUDIO, idDeclAllocator ); - RegisterDeclFolder( "materials", ".mtr", DECL_MATERIAL ); - RegisterDeclFolder( "skins", ".skin", DECL_SKIN ); - RegisterDeclFolder( "sound", ".sndshd", DECL_SOUND ); + RegisterDeclFolderWrapper( "materials", ".mtr", DECL_MATERIAL ); + RegisterDeclFolderWrapper( "skins", ".skin", DECL_SKIN ); + RegisterDeclFolderWrapper( "sound", ".sndshd", DECL_SOUND, false, true ); + RegisterDeclFolderWrapper( "materials/types", ".mtt", DECL_MATERIALTYPE ); + RegisterDeclFolderWrapper( "lipsync", ".lipsync", DECL_LIPSYNC ); + RegisterDeclFolderWrapper( "playbacks", ".playback", DECL_PLAYBACK, true ); + RegisterDeclFolderWrapper( "effects", ".fx", DECL_EFFECT, true ); // add console commands cmdSystem->AddCommand( "listDecls", ListDecls_f, CMD_FL_SYSTEM, "lists all decls" ); diff --git a/src/framework/session.cpp b/src/framework/session.cpp index 6a0f7c7..43e4a04 100644 --- a/src/framework/session.cpp +++ b/src/framework/session.cpp @@ -1440,26 +1440,49 @@ void idSessionLocal::UnloadMap() { idSessionLocal::LoadLoadingGui =============== */ -void idSessionLocal::LoadLoadingGui( const char *mapName ) { - // load / program a gui to stay up on the screen while loading - idStr stripped = mapName; - stripped.StripFileExtension(); - stripped.StripPath(); - - char guiMap[ MAX_STRING_CHARS ]; - strncpy( guiMap, va( "guis/map/%s.gui", stripped.c_str() ), MAX_STRING_CHARS ); - // give the gamecode a chance to override - const char *gameLoadingGui = game->GetLoadingGui( mapName ); - if ( gameLoadingGui != NULL && gameLoadingGui[0] != '\0' ) { - idStr::Copynz( guiMap, gameLoadingGui, sizeof( guiMap ) ); +void idSessionLocal::LoadLoadingGui( const char *mapName, const char *entityFilter ) { + idStr mapDeclName = mapName; + if ( entityFilter && entityFilter[0] && !idAsyncNetwork::IsActive() ) { + mapDeclName += "_"; + mapDeclName += entityFilter; } - if ( uiManager->CheckGui( guiMap ) ) { - guiLoading = uiManager->FindGui( guiMap, true, false, true ); + const idDecl *decl = declManager->FindType( DECL_MAPDEF, mapDeclName.c_str(), false ); + const idDeclEntityDef *mapDef = static_cast( decl ); + + const char *levelName = mapDeclName.c_str(); + const char *objectives = ""; + const char *loadImage = "gfx/guis/loadscreens/generic"; + + if ( mapDef ) { + levelName = mapDef->dict.GetString( "name", mapDeclName.c_str() ); + objectives = mapDef->dict.GetString( "objectives", "" ); + loadImage = mapDef->dict.GetString( "loadimage", "gfx/guis/loadscreens/generic" ); + + const char *loadGui = mapDef->dict.GetString( "loadgui", "" ); + if ( loadGui[0] ) { + guiLoading = uiManager->FindGui( loadGui, true, false, true ); + } else if ( objectives[0] ) { + guiLoading = uiManager->FindGui( "guis/loading/splevel.gui", true, false, true ); + } else if ( idAsyncNetwork::IsActive() ) { + guiLoading = uiManager->FindGui( "guis/loading/mplevel.gui", true, false, true ); + } else { + guiLoading = uiManager->FindGui( "guis/loading/generic.gui", true, false, true ); + } + } else if ( idAsyncNetwork::IsActive() ) { + guiLoading = uiManager->FindGui( "guis/loading/mplevel.gui", true, false, true ); } else { - guiLoading = uiManager->FindGui( "guis/map/loading.gui", true, false, true ); + guiLoading = uiManager->FindGui( "guis/loading/generic.gui", true, false, true ); + } + + if ( guiLoading ) { + guiLoading->SetStateFloat( "map_loading", 0.0f ); + guiLoading->SetStateString( "loading_bkgnd", loadImage ); + guiLoading->SetStateString( "loading_levelname", common->GetLocalizedString( levelName ) ); + guiLoading->SetStateString( "loading_objectives", common->GetLocalizedString( objectives ) ); + declManager->FindMaterial( loadImage )->SetSort( SS_GUI ); + guiLoading->StateChanged( com_frameTime, false ); } - guiLoading->SetStateFloat( "map_loading", 0.0f ); } /* @@ -1467,8 +1490,13 @@ void idSessionLocal::LoadLoadingGui( const char *mapName ) { idSessionLocal::GetBytesNeededForMapLoad =============== */ -int idSessionLocal::GetBytesNeededForMapLoad( const char *mapName ) { - const idDecl *mapDecl = declManager->FindType( DECL_MAPDEF, mapName, false ); +int idSessionLocal::GetBytesNeededForMapLoad( const char *mapName, const char *entityFilter ) { + idStr mapDeclName = mapName; + if ( entityFilter && entityFilter[0] ) { + mapDeclName += "_"; + mapDeclName += entityFilter; + } + const idDecl *mapDecl = declManager->FindType( DECL_MAPDEF, mapDeclName.c_str(), false ); const idDeclEntityDef *mapDef = static_cast( mapDecl ); if ( mapDef ) { return mapDef->dict.GetInt( va("size%d", Max( 0, com_machineSpec.GetInteger() ) ) ); @@ -1486,8 +1514,13 @@ int idSessionLocal::GetBytesNeededForMapLoad( const char *mapName ) { idSessionLocal::SetBytesNeededForMapLoad =============== */ -void idSessionLocal::SetBytesNeededForMapLoad( const char *mapName, int bytesNeeded ) { - idDecl *mapDecl = const_cast(declManager->FindType( DECL_MAPDEF, mapName, false )); +void idSessionLocal::SetBytesNeededForMapLoad( const char *mapName, const char *entityFilter, int bytesNeeded ) { + idStr mapDeclName = mapName; + if ( entityFilter && entityFilter[0] ) { + mapDeclName += "_"; + mapDeclName += entityFilter; + } + idDecl *mapDecl = const_cast(declManager->FindType( DECL_MAPDEF, mapDeclName.c_str(), false )); idDeclEntityDef *mapDef = static_cast( mapDecl ); if ( com_updateLoadSize.GetBool() && mapDef ) { @@ -1554,6 +1587,7 @@ void idSessionLocal::ExecuteMapChange( bool noFadeWipe ) { // extract the map name from serverinfo idStr mapString = mapSpawnData.serverInfo.GetString( "si_map" ); + idStr filterString = mapSpawnData.serverInfo.GetString( "si_entityFilter" ); idStr fullMapName = "maps/"; fullMapName += mapString; @@ -1581,7 +1615,7 @@ void idSessionLocal::ExecuteMapChange( bool noFadeWipe ) { uiManager->Reload( true ); // set the loading gui that we will wipe to - LoadLoadingGui( mapString ); + LoadLoadingGui( mapString.c_str(), filterString.c_str() ); // cause prints to force screen updates as a pacifier, // and draw the loading gui instead of game draws @@ -1591,7 +1625,7 @@ void idSessionLocal::ExecuteMapChange( bool noFadeWipe ) { // work for new maps etc. after the first load. we can also drop the sizes into the default.cfg fileSystem->ResetReadCount(); if ( !reloadingSameMap ) { - bytesNeededForMapLoad = GetBytesNeededForMapLoad( mapString.c_str() ); + bytesNeededForMapLoad = GetBytesNeededForMapLoad( mapString.c_str(), filterString.c_str() ); } else { bytesNeededForMapLoad = 30 * 1024 * 1024; } @@ -1662,7 +1696,7 @@ void idSessionLocal::ExecuteMapChange( bool noFadeWipe ) { renderSystem->EndLevelLoad(); soundSystem->EndLevelLoad( mapString.c_str() ); declManager->EndLevelLoad(); - SetBytesNeededForMapLoad( mapString.c_str(), fileSystem->GetReadCount() ); + SetBytesNeededForMapLoad( mapString.c_str(), filterString.c_str(), fileSystem->GetReadCount() ); } uiManager->EndLevelLoad(); diff --git a/src/game/Game_local.cpp b/src/game/Game_local.cpp index ef1b70e..c8d485b 100644 --- a/src/game/Game_local.cpp +++ b/src/game/Game_local.cpp @@ -504,6 +504,7 @@ void idGameLocal::Init( void ) { // RAVEN BEGIN // rjohnson: camera is now contained in a def for frame commands declManager->RegisterDeclType( "camera", DECL_CAMERADEF, idDeclAllocator ); + declManager->RegisterDeclType( "playerModel", DECL_PLAYER_MODEL, idDeclAllocator ); // RAVEN END // register game specific decl folders // RAVEN BEGIN @@ -1351,6 +1352,7 @@ void idGameLocal::LoadMap( const char *mapName, int randseed ) { // RAVEN END } mapFileName = mapFile->GetName(); + Printf( "Q4 game trace: map resolved as %s\n", mapFileName.c_str() ); assert(!idStr::Cmp(mapFileName, mapFile->GetName())); @@ -1370,8 +1372,13 @@ void idGameLocal::LoadMap( const char *mapName, int randseed ) { // RAVEN END // load the collision map - networkSystem->SetLoadingText( common->GetLocalizedString( "#str_107668" ) ); + Printf( "Q4 game trace: resolving collision loading text\n" ); + const char *collisionLoadingText = common->GetLocalizedString( "#str_107668" ); + Printf( "Q4 game trace: setting collision loading text\n" ); + networkSystem->SetLoadingText( collisionLoadingText ); + Printf( "Q4 game trace: loading collision map\n" ); collisionModelManager->LoadMap( mapFile, false ); + Printf( "Q4 game trace: collision map loaded\n" ); numClients = 0; @@ -1445,10 +1452,12 @@ void idGameLocal::LoadMap( const char *mapName, int randseed ) { gravityInfo.Clear(); scriptObjectProxies.Clear(); // RAVEN END + Printf( "Q4 game trace: base map state cleared\n" ); if ( !editEntities ) { editEntities = new idEditEntities; } + Printf( "Q4 game trace: edit entities ready\n" ); if ( gameLocal.isMultiplayer ) { gravity.Set( 0, 0, -g_mp_gravity.GetFloat() ); @@ -1464,6 +1473,7 @@ void idGameLocal::LoadMap( const char *mapName, int randseed ) { aiManager.UnMarkAllReachBlocked(); aiManager.Clear(); // RAVEN END + Printf( "Q4 game trace: AI manager cleared\n" ); skipCinematic = false; inCinematic = false; @@ -1473,11 +1483,15 @@ void idGameLocal::LoadMap( const char *mapName, int randseed ) { // RAVEN BEGIN // ddynerman: main world instance + Printf( "Q4 game trace: adding world instance\n" ); PACIFIER_UPDATE; AddInstance( 0, true ); + Printf( "Q4 game trace: world instance added\n" ); assert( instances.Num() == 1 && instances[ 0 ]->GetInstanceID() == 0 ); // RAVEN END + Printf( "Q4 game trace: initializing PVS\n" ); pvs.Init(); + Printf( "Q4 game trace: PVS initialized\n" ); // RAVEN BEGIN // mwhitlock: Xenon texture streaming #if defined(_XENON) @@ -1498,10 +1512,14 @@ void idGameLocal::LoadMap( const char *mapName, int randseed ) { // RAVEN BEGIN // cdr: Obstacle Avoidance + Printf( "Q4 game trace: initializing AI movement\n" ); AI_MoveInitialize(); + Printf( "Q4 game trace: AI movement initialized\n" ); // RAVEN END + Printf( "Q4 game trace: precaching extras\n" ); FindEntityDef( "preCacheExtras", false ); + Printf( "Q4 game trace: extras precached\n" ); if ( !sameMap ) { mapFile->RemovePrimitiveData(); @@ -1511,6 +1529,7 @@ void idGameLocal::LoadMap( const char *mapName, int randseed ) { // ddynerman: ambient light list ambientLights.Clear(); // RAVEN END + Printf( "Q4 game trace: LoadMap complete\n" ); } /* @@ -8214,6 +8233,7 @@ idGameLocal::AddClipWorld =================== */ int idGameLocal::AddClipWorld( int id ) { + Printf( "Q4 game trace: AddClipWorld %d begin (num=%d)\n", id, clip.Num() ); if( id >= clip.Num() ) { // if we want an index higher in the list, fill the intermediate indices with empties for( int i = clip.Num(); i <= id; i++ ) { @@ -8227,12 +8247,15 @@ int idGameLocal::AddClipWorld( int id ) { RV_PUSH_SYS_HEAP_ID(RV_HEAP_ID_LEVEL); // RAVEN END clip[ id ] = new idClip(); + Printf( "Q4 game trace: AddClipWorld %d allocated\n", id ); // RAVEN BEGIN // mwhitlock: Dynamic memory consolidation RV_POP_HEAP(); // RAVEN END clip[ id ]->Init(); + Printf( "Q4 game trace: AddClipWorld %d initialized\n", id ); } + Printf( "Q4 game trace: AddClipWorld %d complete\n", id ); return id; } @@ -8271,6 +8294,7 @@ idGameLocal::AddInstance =================== */ int idGameLocal::AddInstance( int id, bool deferPopulate ) { + Printf( "Q4 game trace: AddInstance %d begin (num=%d)\n", id, instances.Num() ); if ( id == -1 ) { id = instances.Num(); } @@ -8287,6 +8311,7 @@ int idGameLocal::AddInstance( int id, bool deferPopulate ) { // mwhitlock: Dynamic memory consolidation RV_PUSH_SYS_HEAP_ID(RV_HEAP_ID_LEVEL); instances[ id ] = new rvInstance( id, deferPopulate ); + Printf( "Q4 game trace: AddInstance %d allocated\n", id ); RV_POP_HEAP(); // RAVEN END @@ -8302,6 +8327,7 @@ int idGameLocal::AddInstance( int id, bool deferPopulate ) { // keep the min spawn index correctly set ServerSetMinSpawnIndex(); + Printf( "Q4 game trace: AddInstance %d complete\n", id ); return instances[ id ]->GetInstanceID(); } diff --git a/src/game/gamesys/Callbacks.cpp b/src/game/gamesys/Callbacks.cpp index 4c3c929..e69de29 100644 --- a/src/game/gamesys/Callbacks.cpp +++ b/src/game/gamesys/Callbacks.cpp @@ -1,2624 +0,0 @@ -/* -=========================================================================== - -Quake 4 Reconstructed GPL Source Code -Copyright (C) 2026 Justin Marshall(IceColdDuke). - -This file is part of the Quake 4 Reconstructed GPL Source Code (?Quake 4 Reconstructed Source Code?). - -Quake 4 Reconstructed 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 3 of the License, or -(at your option) any later version. - -Quake 4 Reconstructed 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 Quake 4 Reconstructed Source Code. If not, see . - -=========================================================================== -*/ - -// generated file - see CREATE_EVENT_CODE - - /******************************************************* - - 1 args - - *******************************************************/ - - case 512 : - typedef void ( idClass::*eventCallback_i_t )( const int ); - ( this->*( eventCallback_i_t )callback )( data[ 0 ] ); - break; - - case 513 : - typedef void ( idClass::*eventCallback_f_t )( const float ); - ( this->*( eventCallback_f_t )callback )( *( float * )&data[ 0 ] ); - break; - - /******************************************************* - - 2 args - - *******************************************************/ - - case 1024 : - typedef void ( idClass::*eventCallback_ii_t )( const int, const int ); - ( this->*( eventCallback_ii_t )callback )( data[ 0 ], data[ 1 ] ); - break; - - case 1025 : - typedef void ( idClass::*eventCallback_fi_t )( const float, const int ); - ( this->*( eventCallback_fi_t )callback )( *( float * )&data[ 0 ], data[ 1 ] ); - break; - - case 1026 : - typedef void ( idClass::*eventCallback_if_t )( const int, const float ); - ( this->*( eventCallback_if_t )callback )( data[ 0 ], *( float * )&data[ 1 ] ); - break; - - case 1027 : - typedef void ( idClass::*eventCallback_ff_t )( const float, const float ); - ( this->*( eventCallback_ff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ] ); - break; - - /******************************************************* - - 3 args - - *******************************************************/ - - case 2048 : - typedef void ( idClass::*eventCallback_iii_t )( const int, const int, const int ); - ( this->*( eventCallback_iii_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ] ); - break; - - case 2049 : - typedef void ( idClass::*eventCallback_fii_t )( const float, const int, const int ); - ( this->*( eventCallback_fii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ] ); - break; - - case 2050 : - typedef void ( idClass::*eventCallback_ifi_t )( const int, const float, const int ); - ( this->*( eventCallback_ifi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ] ); - break; - - case 2051 : - typedef void ( idClass::*eventCallback_ffi_t )( const float, const float, const int ); - ( this->*( eventCallback_ffi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ] ); - break; - - case 2052 : - typedef void ( idClass::*eventCallback_iif_t )( const int, const int, const float ); - ( this->*( eventCallback_iif_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ] ); - break; - - case 2053 : - typedef void ( idClass::*eventCallback_fif_t )( const float, const int, const float ); - ( this->*( eventCallback_fif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ] ); - break; - - case 2054 : - typedef void ( idClass::*eventCallback_iff_t )( const int, const float, const float ); - ( this->*( eventCallback_iff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ] ); - break; - - case 2055 : - typedef void ( idClass::*eventCallback_fff_t )( const float, const float, const float ); - ( this->*( eventCallback_fff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ] ); - break; - - /******************************************************* - - 4 args - - *******************************************************/ - - case 4096 : - typedef void ( idClass::*eventCallback_iiii_t )( const int, const int, const int, const int ); - ( this->*( eventCallback_iiii_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ] ); - break; - - case 4097 : - typedef void ( idClass::*eventCallback_fiii_t )( const float, const int, const int, const int ); - ( this->*( eventCallback_fiii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ] ); - break; - - case 4098 : - typedef void ( idClass::*eventCallback_ifii_t )( const int, const float, const int, const int ); - ( this->*( eventCallback_ifii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ] ); - break; - - case 4099 : - typedef void ( idClass::*eventCallback_ffii_t )( const float, const float, const int, const int ); - ( this->*( eventCallback_ffii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ] ); - break; - - case 4100 : - typedef void ( idClass::*eventCallback_iifi_t )( const int, const int, const float, const int ); - ( this->*( eventCallback_iifi_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ] ); - break; - - case 4101 : - typedef void ( idClass::*eventCallback_fifi_t )( const float, const int, const float, const int ); - ( this->*( eventCallback_fifi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ] ); - break; - - case 4102 : - typedef void ( idClass::*eventCallback_iffi_t )( const int, const float, const float, const int ); - ( this->*( eventCallback_iffi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ] ); - break; - - case 4103 : - typedef void ( idClass::*eventCallback_fffi_t )( const float, const float, const float, const int ); - ( this->*( eventCallback_fffi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ] ); - break; - - case 4104 : - typedef void ( idClass::*eventCallback_iiif_t )( const int, const int, const int, const float ); - ( this->*( eventCallback_iiif_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ] ); - break; - - case 4105 : - typedef void ( idClass::*eventCallback_fiif_t )( const float, const int, const int, const float ); - ( this->*( eventCallback_fiif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ] ); - break; - - case 4106 : - typedef void ( idClass::*eventCallback_ifif_t )( const int, const float, const int, const float ); - ( this->*( eventCallback_ifif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ] ); - break; - - case 4107 : - typedef void ( idClass::*eventCallback_ffif_t )( const float, const float, const int, const float ); - ( this->*( eventCallback_ffif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ] ); - break; - - case 4108 : - typedef void ( idClass::*eventCallback_iiff_t )( const int, const int, const float, const float ); - ( this->*( eventCallback_iiff_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ] ); - break; - - case 4109 : - typedef void ( idClass::*eventCallback_fiff_t )( const float, const int, const float, const float ); - ( this->*( eventCallback_fiff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ] ); - break; - - case 4110 : - typedef void ( idClass::*eventCallback_ifff_t )( const int, const float, const float, const float ); - ( this->*( eventCallback_ifff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ] ); - break; - - case 4111 : - typedef void ( idClass::*eventCallback_ffff_t )( const float, const float, const float, const float ); - ( this->*( eventCallback_ffff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ] ); - break; - - /******************************************************* - - 5 args - - *******************************************************/ - - case 8192 : - typedef void ( idClass::*eventCallback_iiiii_t )( const int, const int, const int, const int, const int ); - ( this->*( eventCallback_iiiii_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ] ); - break; - - case 8193 : - typedef void ( idClass::*eventCallback_fiiii_t )( const float, const int, const int, const int, const int ); - ( this->*( eventCallback_fiiii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ] ); - break; - - case 8194 : - typedef void ( idClass::*eventCallback_ifiii_t )( const int, const float, const int, const int, const int ); - ( this->*( eventCallback_ifiii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ] ); - break; - - case 8195 : - typedef void ( idClass::*eventCallback_ffiii_t )( const float, const float, const int, const int, const int ); - ( this->*( eventCallback_ffiii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ] ); - break; - - case 8196 : - typedef void ( idClass::*eventCallback_iifii_t )( const int, const int, const float, const int, const int ); - ( this->*( eventCallback_iifii_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ] ); - break; - - case 8197 : - typedef void ( idClass::*eventCallback_fifii_t )( const float, const int, const float, const int, const int ); - ( this->*( eventCallback_fifii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ] ); - break; - - case 8198 : - typedef void ( idClass::*eventCallback_iffii_t )( const int, const float, const float, const int, const int ); - ( this->*( eventCallback_iffii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ] ); - break; - - case 8199 : - typedef void ( idClass::*eventCallback_fffii_t )( const float, const float, const float, const int, const int ); - ( this->*( eventCallback_fffii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ] ); - break; - - case 8200 : - typedef void ( idClass::*eventCallback_iiifi_t )( const int, const int, const int, const float, const int ); - ( this->*( eventCallback_iiifi_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ] ); - break; - - case 8201 : - typedef void ( idClass::*eventCallback_fiifi_t )( const float, const int, const int, const float, const int ); - ( this->*( eventCallback_fiifi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ] ); - break; - - case 8202 : - typedef void ( idClass::*eventCallback_ififi_t )( const int, const float, const int, const float, const int ); - ( this->*( eventCallback_ififi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ] ); - break; - - case 8203 : - typedef void ( idClass::*eventCallback_ffifi_t )( const float, const float, const int, const float, const int ); - ( this->*( eventCallback_ffifi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ] ); - break; - - case 8204 : - typedef void ( idClass::*eventCallback_iiffi_t )( const int, const int, const float, const float, const int ); - ( this->*( eventCallback_iiffi_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ] ); - break; - - case 8205 : - typedef void ( idClass::*eventCallback_fiffi_t )( const float, const int, const float, const float, const int ); - ( this->*( eventCallback_fiffi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ] ); - break; - - case 8206 : - typedef void ( idClass::*eventCallback_ifffi_t )( const int, const float, const float, const float, const int ); - ( this->*( eventCallback_ifffi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ] ); - break; - - case 8207 : - typedef void ( idClass::*eventCallback_ffffi_t )( const float, const float, const float, const float, const int ); - ( this->*( eventCallback_ffffi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ] ); - break; - - case 8208 : - typedef void ( idClass::*eventCallback_iiiif_t )( const int, const int, const int, const int, const float ); - ( this->*( eventCallback_iiiif_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ] ); - break; - - case 8209 : - typedef void ( idClass::*eventCallback_fiiif_t )( const float, const int, const int, const int, const float ); - ( this->*( eventCallback_fiiif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ] ); - break; - - case 8210 : - typedef void ( idClass::*eventCallback_ifiif_t )( const int, const float, const int, const int, const float ); - ( this->*( eventCallback_ifiif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ] ); - break; - - case 8211 : - typedef void ( idClass::*eventCallback_ffiif_t )( const float, const float, const int, const int, const float ); - ( this->*( eventCallback_ffiif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ] ); - break; - - case 8212 : - typedef void ( idClass::*eventCallback_iifif_t )( const int, const int, const float, const int, const float ); - ( this->*( eventCallback_iifif_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ] ); - break; - - case 8213 : - typedef void ( idClass::*eventCallback_fifif_t )( const float, const int, const float, const int, const float ); - ( this->*( eventCallback_fifif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ] ); - break; - - case 8214 : - typedef void ( idClass::*eventCallback_iffif_t )( const int, const float, const float, const int, const float ); - ( this->*( eventCallback_iffif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ] ); - break; - - case 8215 : - typedef void ( idClass::*eventCallback_fffif_t )( const float, const float, const float, const int, const float ); - ( this->*( eventCallback_fffif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ] ); - break; - - case 8216 : - typedef void ( idClass::*eventCallback_iiiff_t )( const int, const int, const int, const float, const float ); - ( this->*( eventCallback_iiiff_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ] ); - break; - - case 8217 : - typedef void ( idClass::*eventCallback_fiiff_t )( const float, const int, const int, const float, const float ); - ( this->*( eventCallback_fiiff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ] ); - break; - - case 8218 : - typedef void ( idClass::*eventCallback_ififf_t )( const int, const float, const int, const float, const float ); - ( this->*( eventCallback_ififf_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ] ); - break; - - case 8219 : - typedef void ( idClass::*eventCallback_ffiff_t )( const float, const float, const int, const float, const float ); - ( this->*( eventCallback_ffiff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ] ); - break; - - case 8220 : - typedef void ( idClass::*eventCallback_iifff_t )( const int, const int, const float, const float, const float ); - ( this->*( eventCallback_iifff_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ] ); - break; - - case 8221 : - typedef void ( idClass::*eventCallback_fifff_t )( const float, const int, const float, const float, const float ); - ( this->*( eventCallback_fifff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ] ); - break; - - case 8222 : - typedef void ( idClass::*eventCallback_iffff_t )( const int, const float, const float, const float, const float ); - ( this->*( eventCallback_iffff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ] ); - break; - - case 8223 : - typedef void ( idClass::*eventCallback_fffff_t )( const float, const float, const float, const float, const float ); - ( this->*( eventCallback_fffff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ] ); - break; - - /******************************************************* - - 6 args - - *******************************************************/ - - case 16384 : - typedef void ( idClass::*eventCallback_iiiiii_t )( const int, const int, const int, const int, const int, const int ); - ( this->*( eventCallback_iiiiii_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ] ); - break; - - case 16385 : - typedef void ( idClass::*eventCallback_fiiiii_t )( const float, const int, const int, const int, const int, const int ); - ( this->*( eventCallback_fiiiii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ] ); - break; - - case 16386 : - typedef void ( idClass::*eventCallback_ifiiii_t )( const int, const float, const int, const int, const int, const int ); - ( this->*( eventCallback_ifiiii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ] ); - break; - - case 16387 : - typedef void ( idClass::*eventCallback_ffiiii_t )( const float, const float, const int, const int, const int, const int ); - ( this->*( eventCallback_ffiiii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ] ); - break; - - case 16388 : - typedef void ( idClass::*eventCallback_iifiii_t )( const int, const int, const float, const int, const int, const int ); - ( this->*( eventCallback_iifiii_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ] ); - break; - - case 16389 : - typedef void ( idClass::*eventCallback_fifiii_t )( const float, const int, const float, const int, const int, const int ); - ( this->*( eventCallback_fifiii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ] ); - break; - - case 16390 : - typedef void ( idClass::*eventCallback_iffiii_t )( const int, const float, const float, const int, const int, const int ); - ( this->*( eventCallback_iffiii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ] ); - break; - - case 16391 : - typedef void ( idClass::*eventCallback_fffiii_t )( const float, const float, const float, const int, const int, const int ); - ( this->*( eventCallback_fffiii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ] ); - break; - - case 16392 : - typedef void ( idClass::*eventCallback_iiifii_t )( const int, const int, const int, const float, const int, const int ); - ( this->*( eventCallback_iiifii_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ] ); - break; - - case 16393 : - typedef void ( idClass::*eventCallback_fiifii_t )( const float, const int, const int, const float, const int, const int ); - ( this->*( eventCallback_fiifii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ] ); - break; - - case 16394 : - typedef void ( idClass::*eventCallback_ififii_t )( const int, const float, const int, const float, const int, const int ); - ( this->*( eventCallback_ififii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ] ); - break; - - case 16395 : - typedef void ( idClass::*eventCallback_ffifii_t )( const float, const float, const int, const float, const int, const int ); - ( this->*( eventCallback_ffifii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ] ); - break; - - case 16396 : - typedef void ( idClass::*eventCallback_iiffii_t )( const int, const int, const float, const float, const int, const int ); - ( this->*( eventCallback_iiffii_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ] ); - break; - - case 16397 : - typedef void ( idClass::*eventCallback_fiffii_t )( const float, const int, const float, const float, const int, const int ); - ( this->*( eventCallback_fiffii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ] ); - break; - - case 16398 : - typedef void ( idClass::*eventCallback_ifffii_t )( const int, const float, const float, const float, const int, const int ); - ( this->*( eventCallback_ifffii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ] ); - break; - - case 16399 : - typedef void ( idClass::*eventCallback_ffffii_t )( const float, const float, const float, const float, const int, const int ); - ( this->*( eventCallback_ffffii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ] ); - break; - - case 16400 : - typedef void ( idClass::*eventCallback_iiiifi_t )( const int, const int, const int, const int, const float, const int ); - ( this->*( eventCallback_iiiifi_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ] ); - break; - - case 16401 : - typedef void ( idClass::*eventCallback_fiiifi_t )( const float, const int, const int, const int, const float, const int ); - ( this->*( eventCallback_fiiifi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ] ); - break; - - case 16402 : - typedef void ( idClass::*eventCallback_ifiifi_t )( const int, const float, const int, const int, const float, const int ); - ( this->*( eventCallback_ifiifi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ] ); - break; - - case 16403 : - typedef void ( idClass::*eventCallback_ffiifi_t )( const float, const float, const int, const int, const float, const int ); - ( this->*( eventCallback_ffiifi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ] ); - break; - - case 16404 : - typedef void ( idClass::*eventCallback_iififi_t )( const int, const int, const float, const int, const float, const int ); - ( this->*( eventCallback_iififi_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ] ); - break; - - case 16405 : - typedef void ( idClass::*eventCallback_fififi_t )( const float, const int, const float, const int, const float, const int ); - ( this->*( eventCallback_fififi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ] ); - break; - - case 16406 : - typedef void ( idClass::*eventCallback_iffifi_t )( const int, const float, const float, const int, const float, const int ); - ( this->*( eventCallback_iffifi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ] ); - break; - - case 16407 : - typedef void ( idClass::*eventCallback_fffifi_t )( const float, const float, const float, const int, const float, const int ); - ( this->*( eventCallback_fffifi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ] ); - break; - - case 16408 : - typedef void ( idClass::*eventCallback_iiiffi_t )( const int, const int, const int, const float, const float, const int ); - ( this->*( eventCallback_iiiffi_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ] ); - break; - - case 16409 : - typedef void ( idClass::*eventCallback_fiiffi_t )( const float, const int, const int, const float, const float, const int ); - ( this->*( eventCallback_fiiffi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ] ); - break; - - case 16410 : - typedef void ( idClass::*eventCallback_ififfi_t )( const int, const float, const int, const float, const float, const int ); - ( this->*( eventCallback_ififfi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ] ); - break; - - case 16411 : - typedef void ( idClass::*eventCallback_ffiffi_t )( const float, const float, const int, const float, const float, const int ); - ( this->*( eventCallback_ffiffi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ] ); - break; - - case 16412 : - typedef void ( idClass::*eventCallback_iifffi_t )( const int, const int, const float, const float, const float, const int ); - ( this->*( eventCallback_iifffi_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ] ); - break; - - case 16413 : - typedef void ( idClass::*eventCallback_fifffi_t )( const float, const int, const float, const float, const float, const int ); - ( this->*( eventCallback_fifffi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ] ); - break; - - case 16414 : - typedef void ( idClass::*eventCallback_iffffi_t )( const int, const float, const float, const float, const float, const int ); - ( this->*( eventCallback_iffffi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ] ); - break; - - case 16415 : - typedef void ( idClass::*eventCallback_fffffi_t )( const float, const float, const float, const float, const float, const int ); - ( this->*( eventCallback_fffffi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ] ); - break; - - case 16416 : - typedef void ( idClass::*eventCallback_iiiiif_t )( const int, const int, const int, const int, const int, const float ); - ( this->*( eventCallback_iiiiif_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16417 : - typedef void ( idClass::*eventCallback_fiiiif_t )( const float, const int, const int, const int, const int, const float ); - ( this->*( eventCallback_fiiiif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16418 : - typedef void ( idClass::*eventCallback_ifiiif_t )( const int, const float, const int, const int, const int, const float ); - ( this->*( eventCallback_ifiiif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16419 : - typedef void ( idClass::*eventCallback_ffiiif_t )( const float, const float, const int, const int, const int, const float ); - ( this->*( eventCallback_ffiiif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16420 : - typedef void ( idClass::*eventCallback_iifiif_t )( const int, const int, const float, const int, const int, const float ); - ( this->*( eventCallback_iifiif_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16421 : - typedef void ( idClass::*eventCallback_fifiif_t )( const float, const int, const float, const int, const int, const float ); - ( this->*( eventCallback_fifiif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16422 : - typedef void ( idClass::*eventCallback_iffiif_t )( const int, const float, const float, const int, const int, const float ); - ( this->*( eventCallback_iffiif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16423 : - typedef void ( idClass::*eventCallback_fffiif_t )( const float, const float, const float, const int, const int, const float ); - ( this->*( eventCallback_fffiif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16424 : - typedef void ( idClass::*eventCallback_iiifif_t )( const int, const int, const int, const float, const int, const float ); - ( this->*( eventCallback_iiifif_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16425 : - typedef void ( idClass::*eventCallback_fiifif_t )( const float, const int, const int, const float, const int, const float ); - ( this->*( eventCallback_fiifif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16426 : - typedef void ( idClass::*eventCallback_ififif_t )( const int, const float, const int, const float, const int, const float ); - ( this->*( eventCallback_ififif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16427 : - typedef void ( idClass::*eventCallback_ffifif_t )( const float, const float, const int, const float, const int, const float ); - ( this->*( eventCallback_ffifif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16428 : - typedef void ( idClass::*eventCallback_iiffif_t )( const int, const int, const float, const float, const int, const float ); - ( this->*( eventCallback_iiffif_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16429 : - typedef void ( idClass::*eventCallback_fiffif_t )( const float, const int, const float, const float, const int, const float ); - ( this->*( eventCallback_fiffif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16430 : - typedef void ( idClass::*eventCallback_ifffif_t )( const int, const float, const float, const float, const int, const float ); - ( this->*( eventCallback_ifffif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16431 : - typedef void ( idClass::*eventCallback_ffffif_t )( const float, const float, const float, const float, const int, const float ); - ( this->*( eventCallback_ffffif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16432 : - typedef void ( idClass::*eventCallback_iiiiff_t )( const int, const int, const int, const int, const float, const float ); - ( this->*( eventCallback_iiiiff_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16433 : - typedef void ( idClass::*eventCallback_fiiiff_t )( const float, const int, const int, const int, const float, const float ); - ( this->*( eventCallback_fiiiff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16434 : - typedef void ( idClass::*eventCallback_ifiiff_t )( const int, const float, const int, const int, const float, const float ); - ( this->*( eventCallback_ifiiff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16435 : - typedef void ( idClass::*eventCallback_ffiiff_t )( const float, const float, const int, const int, const float, const float ); - ( this->*( eventCallback_ffiiff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16436 : - typedef void ( idClass::*eventCallback_iififf_t )( const int, const int, const float, const int, const float, const float ); - ( this->*( eventCallback_iififf_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16437 : - typedef void ( idClass::*eventCallback_fififf_t )( const float, const int, const float, const int, const float, const float ); - ( this->*( eventCallback_fififf_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16438 : - typedef void ( idClass::*eventCallback_iffiff_t )( const int, const float, const float, const int, const float, const float ); - ( this->*( eventCallback_iffiff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16439 : - typedef void ( idClass::*eventCallback_fffiff_t )( const float, const float, const float, const int, const float, const float ); - ( this->*( eventCallback_fffiff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16440 : - typedef void ( idClass::*eventCallback_iiifff_t )( const int, const int, const int, const float, const float, const float ); - ( this->*( eventCallback_iiifff_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16441 : - typedef void ( idClass::*eventCallback_fiifff_t )( const float, const int, const int, const float, const float, const float ); - ( this->*( eventCallback_fiifff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16442 : - typedef void ( idClass::*eventCallback_ififff_t )( const int, const float, const int, const float, const float, const float ); - ( this->*( eventCallback_ififff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16443 : - typedef void ( idClass::*eventCallback_ffifff_t )( const float, const float, const int, const float, const float, const float ); - ( this->*( eventCallback_ffifff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16444 : - typedef void ( idClass::*eventCallback_iiffff_t )( const int, const int, const float, const float, const float, const float ); - ( this->*( eventCallback_iiffff_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16445 : - typedef void ( idClass::*eventCallback_fiffff_t )( const float, const int, const float, const float, const float, const float ); - ( this->*( eventCallback_fiffff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16446 : - typedef void ( idClass::*eventCallback_ifffff_t )( const int, const float, const float, const float, const float, const float ); - ( this->*( eventCallback_ifffff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ] ); - break; - - case 16447 : - typedef void ( idClass::*eventCallback_ffffff_t )( const float, const float, const float, const float, const float, const float ); - ( this->*( eventCallback_ffffff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ] ); - break; - - /******************************************************* - - 7 args - - *******************************************************/ - - case 32768 : - typedef void ( idClass::*eventCallback_iiiiiii_t )( const int, const int, const int, const int, const int, const int, const int ); - ( this->*( eventCallback_iiiiiii_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32769 : - typedef void ( idClass::*eventCallback_fiiiiii_t )( const float, const int, const int, const int, const int, const int, const int ); - ( this->*( eventCallback_fiiiiii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32770 : - typedef void ( idClass::*eventCallback_ifiiiii_t )( const int, const float, const int, const int, const int, const int, const int ); - ( this->*( eventCallback_ifiiiii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32771 : - typedef void ( idClass::*eventCallback_ffiiiii_t )( const float, const float, const int, const int, const int, const int, const int ); - ( this->*( eventCallback_ffiiiii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32772 : - typedef void ( idClass::*eventCallback_iifiiii_t )( const int, const int, const float, const int, const int, const int, const int ); - ( this->*( eventCallback_iifiiii_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32773 : - typedef void ( idClass::*eventCallback_fifiiii_t )( const float, const int, const float, const int, const int, const int, const int ); - ( this->*( eventCallback_fifiiii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32774 : - typedef void ( idClass::*eventCallback_iffiiii_t )( const int, const float, const float, const int, const int, const int, const int ); - ( this->*( eventCallback_iffiiii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32775 : - typedef void ( idClass::*eventCallback_fffiiii_t )( const float, const float, const float, const int, const int, const int, const int ); - ( this->*( eventCallback_fffiiii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32776 : - typedef void ( idClass::*eventCallback_iiifiii_t )( const int, const int, const int, const float, const int, const int, const int ); - ( this->*( eventCallback_iiifiii_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32777 : - typedef void ( idClass::*eventCallback_fiifiii_t )( const float, const int, const int, const float, const int, const int, const int ); - ( this->*( eventCallback_fiifiii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32778 : - typedef void ( idClass::*eventCallback_ififiii_t )( const int, const float, const int, const float, const int, const int, const int ); - ( this->*( eventCallback_ififiii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32779 : - typedef void ( idClass::*eventCallback_ffifiii_t )( const float, const float, const int, const float, const int, const int, const int ); - ( this->*( eventCallback_ffifiii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32780 : - typedef void ( idClass::*eventCallback_iiffiii_t )( const int, const int, const float, const float, const int, const int, const int ); - ( this->*( eventCallback_iiffiii_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32781 : - typedef void ( idClass::*eventCallback_fiffiii_t )( const float, const int, const float, const float, const int, const int, const int ); - ( this->*( eventCallback_fiffiii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32782 : - typedef void ( idClass::*eventCallback_ifffiii_t )( const int, const float, const float, const float, const int, const int, const int ); - ( this->*( eventCallback_ifffiii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32783 : - typedef void ( idClass::*eventCallback_ffffiii_t )( const float, const float, const float, const float, const int, const int, const int ); - ( this->*( eventCallback_ffffiii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32784 : - typedef void ( idClass::*eventCallback_iiiifii_t )( const int, const int, const int, const int, const float, const int, const int ); - ( this->*( eventCallback_iiiifii_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32785 : - typedef void ( idClass::*eventCallback_fiiifii_t )( const float, const int, const int, const int, const float, const int, const int ); - ( this->*( eventCallback_fiiifii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32786 : - typedef void ( idClass::*eventCallback_ifiifii_t )( const int, const float, const int, const int, const float, const int, const int ); - ( this->*( eventCallback_ifiifii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32787 : - typedef void ( idClass::*eventCallback_ffiifii_t )( const float, const float, const int, const int, const float, const int, const int ); - ( this->*( eventCallback_ffiifii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32788 : - typedef void ( idClass::*eventCallback_iififii_t )( const int, const int, const float, const int, const float, const int, const int ); - ( this->*( eventCallback_iififii_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32789 : - typedef void ( idClass::*eventCallback_fififii_t )( const float, const int, const float, const int, const float, const int, const int ); - ( this->*( eventCallback_fififii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32790 : - typedef void ( idClass::*eventCallback_iffifii_t )( const int, const float, const float, const int, const float, const int, const int ); - ( this->*( eventCallback_iffifii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32791 : - typedef void ( idClass::*eventCallback_fffifii_t )( const float, const float, const float, const int, const float, const int, const int ); - ( this->*( eventCallback_fffifii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32792 : - typedef void ( idClass::*eventCallback_iiiffii_t )( const int, const int, const int, const float, const float, const int, const int ); - ( this->*( eventCallback_iiiffii_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32793 : - typedef void ( idClass::*eventCallback_fiiffii_t )( const float, const int, const int, const float, const float, const int, const int ); - ( this->*( eventCallback_fiiffii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32794 : - typedef void ( idClass::*eventCallback_ififfii_t )( const int, const float, const int, const float, const float, const int, const int ); - ( this->*( eventCallback_ififfii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32795 : - typedef void ( idClass::*eventCallback_ffiffii_t )( const float, const float, const int, const float, const float, const int, const int ); - ( this->*( eventCallback_ffiffii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32796 : - typedef void ( idClass::*eventCallback_iifffii_t )( const int, const int, const float, const float, const float, const int, const int ); - ( this->*( eventCallback_iifffii_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32797 : - typedef void ( idClass::*eventCallback_fifffii_t )( const float, const int, const float, const float, const float, const int, const int ); - ( this->*( eventCallback_fifffii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32798 : - typedef void ( idClass::*eventCallback_iffffii_t )( const int, const float, const float, const float, const float, const int, const int ); - ( this->*( eventCallback_iffffii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32799 : - typedef void ( idClass::*eventCallback_fffffii_t )( const float, const float, const float, const float, const float, const int, const int ); - ( this->*( eventCallback_fffffii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ] ); - break; - - case 32800 : - typedef void ( idClass::*eventCallback_iiiiifi_t )( const int, const int, const int, const int, const int, const float, const int ); - ( this->*( eventCallback_iiiiifi_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32801 : - typedef void ( idClass::*eventCallback_fiiiifi_t )( const float, const int, const int, const int, const int, const float, const int ); - ( this->*( eventCallback_fiiiifi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32802 : - typedef void ( idClass::*eventCallback_ifiiifi_t )( const int, const float, const int, const int, const int, const float, const int ); - ( this->*( eventCallback_ifiiifi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32803 : - typedef void ( idClass::*eventCallback_ffiiifi_t )( const float, const float, const int, const int, const int, const float, const int ); - ( this->*( eventCallback_ffiiifi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32804 : - typedef void ( idClass::*eventCallback_iifiifi_t )( const int, const int, const float, const int, const int, const float, const int ); - ( this->*( eventCallback_iifiifi_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32805 : - typedef void ( idClass::*eventCallback_fifiifi_t )( const float, const int, const float, const int, const int, const float, const int ); - ( this->*( eventCallback_fifiifi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32806 : - typedef void ( idClass::*eventCallback_iffiifi_t )( const int, const float, const float, const int, const int, const float, const int ); - ( this->*( eventCallback_iffiifi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32807 : - typedef void ( idClass::*eventCallback_fffiifi_t )( const float, const float, const float, const int, const int, const float, const int ); - ( this->*( eventCallback_fffiifi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32808 : - typedef void ( idClass::*eventCallback_iiififi_t )( const int, const int, const int, const float, const int, const float, const int ); - ( this->*( eventCallback_iiififi_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32809 : - typedef void ( idClass::*eventCallback_fiififi_t )( const float, const int, const int, const float, const int, const float, const int ); - ( this->*( eventCallback_fiififi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32810 : - typedef void ( idClass::*eventCallback_ifififi_t )( const int, const float, const int, const float, const int, const float, const int ); - ( this->*( eventCallback_ifififi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32811 : - typedef void ( idClass::*eventCallback_ffififi_t )( const float, const float, const int, const float, const int, const float, const int ); - ( this->*( eventCallback_ffififi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32812 : - typedef void ( idClass::*eventCallback_iiffifi_t )( const int, const int, const float, const float, const int, const float, const int ); - ( this->*( eventCallback_iiffifi_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32813 : - typedef void ( idClass::*eventCallback_fiffifi_t )( const float, const int, const float, const float, const int, const float, const int ); - ( this->*( eventCallback_fiffifi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32814 : - typedef void ( idClass::*eventCallback_ifffifi_t )( const int, const float, const float, const float, const int, const float, const int ); - ( this->*( eventCallback_ifffifi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32815 : - typedef void ( idClass::*eventCallback_ffffifi_t )( const float, const float, const float, const float, const int, const float, const int ); - ( this->*( eventCallback_ffffifi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32816 : - typedef void ( idClass::*eventCallback_iiiiffi_t )( const int, const int, const int, const int, const float, const float, const int ); - ( this->*( eventCallback_iiiiffi_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32817 : - typedef void ( idClass::*eventCallback_fiiiffi_t )( const float, const int, const int, const int, const float, const float, const int ); - ( this->*( eventCallback_fiiiffi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32818 : - typedef void ( idClass::*eventCallback_ifiiffi_t )( const int, const float, const int, const int, const float, const float, const int ); - ( this->*( eventCallback_ifiiffi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32819 : - typedef void ( idClass::*eventCallback_ffiiffi_t )( const float, const float, const int, const int, const float, const float, const int ); - ( this->*( eventCallback_ffiiffi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32820 : - typedef void ( idClass::*eventCallback_iififfi_t )( const int, const int, const float, const int, const float, const float, const int ); - ( this->*( eventCallback_iififfi_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32821 : - typedef void ( idClass::*eventCallback_fififfi_t )( const float, const int, const float, const int, const float, const float, const int ); - ( this->*( eventCallback_fififfi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32822 : - typedef void ( idClass::*eventCallback_iffiffi_t )( const int, const float, const float, const int, const float, const float, const int ); - ( this->*( eventCallback_iffiffi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32823 : - typedef void ( idClass::*eventCallback_fffiffi_t )( const float, const float, const float, const int, const float, const float, const int ); - ( this->*( eventCallback_fffiffi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32824 : - typedef void ( idClass::*eventCallback_iiifffi_t )( const int, const int, const int, const float, const float, const float, const int ); - ( this->*( eventCallback_iiifffi_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32825 : - typedef void ( idClass::*eventCallback_fiifffi_t )( const float, const int, const int, const float, const float, const float, const int ); - ( this->*( eventCallback_fiifffi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32826 : - typedef void ( idClass::*eventCallback_ififffi_t )( const int, const float, const int, const float, const float, const float, const int ); - ( this->*( eventCallback_ififffi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32827 : - typedef void ( idClass::*eventCallback_ffifffi_t )( const float, const float, const int, const float, const float, const float, const int ); - ( this->*( eventCallback_ffifffi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32828 : - typedef void ( idClass::*eventCallback_iiffffi_t )( const int, const int, const float, const float, const float, const float, const int ); - ( this->*( eventCallback_iiffffi_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32829 : - typedef void ( idClass::*eventCallback_fiffffi_t )( const float, const int, const float, const float, const float, const float, const int ); - ( this->*( eventCallback_fiffffi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32830 : - typedef void ( idClass::*eventCallback_ifffffi_t )( const int, const float, const float, const float, const float, const float, const int ); - ( this->*( eventCallback_ifffffi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32831 : - typedef void ( idClass::*eventCallback_ffffffi_t )( const float, const float, const float, const float, const float, const float, const int ); - ( this->*( eventCallback_ffffffi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ] ); - break; - - case 32832 : - typedef void ( idClass::*eventCallback_iiiiiif_t )( const int, const int, const int, const int, const int, const int, const float ); - ( this->*( eventCallback_iiiiiif_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32833 : - typedef void ( idClass::*eventCallback_fiiiiif_t )( const float, const int, const int, const int, const int, const int, const float ); - ( this->*( eventCallback_fiiiiif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32834 : - typedef void ( idClass::*eventCallback_ifiiiif_t )( const int, const float, const int, const int, const int, const int, const float ); - ( this->*( eventCallback_ifiiiif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32835 : - typedef void ( idClass::*eventCallback_ffiiiif_t )( const float, const float, const int, const int, const int, const int, const float ); - ( this->*( eventCallback_ffiiiif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32836 : - typedef void ( idClass::*eventCallback_iifiiif_t )( const int, const int, const float, const int, const int, const int, const float ); - ( this->*( eventCallback_iifiiif_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32837 : - typedef void ( idClass::*eventCallback_fifiiif_t )( const float, const int, const float, const int, const int, const int, const float ); - ( this->*( eventCallback_fifiiif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32838 : - typedef void ( idClass::*eventCallback_iffiiif_t )( const int, const float, const float, const int, const int, const int, const float ); - ( this->*( eventCallback_iffiiif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32839 : - typedef void ( idClass::*eventCallback_fffiiif_t )( const float, const float, const float, const int, const int, const int, const float ); - ( this->*( eventCallback_fffiiif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32840 : - typedef void ( idClass::*eventCallback_iiifiif_t )( const int, const int, const int, const float, const int, const int, const float ); - ( this->*( eventCallback_iiifiif_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32841 : - typedef void ( idClass::*eventCallback_fiifiif_t )( const float, const int, const int, const float, const int, const int, const float ); - ( this->*( eventCallback_fiifiif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32842 : - typedef void ( idClass::*eventCallback_ififiif_t )( const int, const float, const int, const float, const int, const int, const float ); - ( this->*( eventCallback_ififiif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32843 : - typedef void ( idClass::*eventCallback_ffifiif_t )( const float, const float, const int, const float, const int, const int, const float ); - ( this->*( eventCallback_ffifiif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32844 : - typedef void ( idClass::*eventCallback_iiffiif_t )( const int, const int, const float, const float, const int, const int, const float ); - ( this->*( eventCallback_iiffiif_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32845 : - typedef void ( idClass::*eventCallback_fiffiif_t )( const float, const int, const float, const float, const int, const int, const float ); - ( this->*( eventCallback_fiffiif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32846 : - typedef void ( idClass::*eventCallback_ifffiif_t )( const int, const float, const float, const float, const int, const int, const float ); - ( this->*( eventCallback_ifffiif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32847 : - typedef void ( idClass::*eventCallback_ffffiif_t )( const float, const float, const float, const float, const int, const int, const float ); - ( this->*( eventCallback_ffffiif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32848 : - typedef void ( idClass::*eventCallback_iiiifif_t )( const int, const int, const int, const int, const float, const int, const float ); - ( this->*( eventCallback_iiiifif_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32849 : - typedef void ( idClass::*eventCallback_fiiifif_t )( const float, const int, const int, const int, const float, const int, const float ); - ( this->*( eventCallback_fiiifif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32850 : - typedef void ( idClass::*eventCallback_ifiifif_t )( const int, const float, const int, const int, const float, const int, const float ); - ( this->*( eventCallback_ifiifif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32851 : - typedef void ( idClass::*eventCallback_ffiifif_t )( const float, const float, const int, const int, const float, const int, const float ); - ( this->*( eventCallback_ffiifif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32852 : - typedef void ( idClass::*eventCallback_iififif_t )( const int, const int, const float, const int, const float, const int, const float ); - ( this->*( eventCallback_iififif_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32853 : - typedef void ( idClass::*eventCallback_fififif_t )( const float, const int, const float, const int, const float, const int, const float ); - ( this->*( eventCallback_fififif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32854 : - typedef void ( idClass::*eventCallback_iffifif_t )( const int, const float, const float, const int, const float, const int, const float ); - ( this->*( eventCallback_iffifif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32855 : - typedef void ( idClass::*eventCallback_fffifif_t )( const float, const float, const float, const int, const float, const int, const float ); - ( this->*( eventCallback_fffifif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32856 : - typedef void ( idClass::*eventCallback_iiiffif_t )( const int, const int, const int, const float, const float, const int, const float ); - ( this->*( eventCallback_iiiffif_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32857 : - typedef void ( idClass::*eventCallback_fiiffif_t )( const float, const int, const int, const float, const float, const int, const float ); - ( this->*( eventCallback_fiiffif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32858 : - typedef void ( idClass::*eventCallback_ififfif_t )( const int, const float, const int, const float, const float, const int, const float ); - ( this->*( eventCallback_ififfif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32859 : - typedef void ( idClass::*eventCallback_ffiffif_t )( const float, const float, const int, const float, const float, const int, const float ); - ( this->*( eventCallback_ffiffif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32860 : - typedef void ( idClass::*eventCallback_iifffif_t )( const int, const int, const float, const float, const float, const int, const float ); - ( this->*( eventCallback_iifffif_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32861 : - typedef void ( idClass::*eventCallback_fifffif_t )( const float, const int, const float, const float, const float, const int, const float ); - ( this->*( eventCallback_fifffif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32862 : - typedef void ( idClass::*eventCallback_iffffif_t )( const int, const float, const float, const float, const float, const int, const float ); - ( this->*( eventCallback_iffffif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32863 : - typedef void ( idClass::*eventCallback_fffffif_t )( const float, const float, const float, const float, const float, const int, const float ); - ( this->*( eventCallback_fffffif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32864 : - typedef void ( idClass::*eventCallback_iiiiiff_t )( const int, const int, const int, const int, const int, const float, const float ); - ( this->*( eventCallback_iiiiiff_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32865 : - typedef void ( idClass::*eventCallback_fiiiiff_t )( const float, const int, const int, const int, const int, const float, const float ); - ( this->*( eventCallback_fiiiiff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32866 : - typedef void ( idClass::*eventCallback_ifiiiff_t )( const int, const float, const int, const int, const int, const float, const float ); - ( this->*( eventCallback_ifiiiff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32867 : - typedef void ( idClass::*eventCallback_ffiiiff_t )( const float, const float, const int, const int, const int, const float, const float ); - ( this->*( eventCallback_ffiiiff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32868 : - typedef void ( idClass::*eventCallback_iifiiff_t )( const int, const int, const float, const int, const int, const float, const float ); - ( this->*( eventCallback_iifiiff_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32869 : - typedef void ( idClass::*eventCallback_fifiiff_t )( const float, const int, const float, const int, const int, const float, const float ); - ( this->*( eventCallback_fifiiff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32870 : - typedef void ( idClass::*eventCallback_iffiiff_t )( const int, const float, const float, const int, const int, const float, const float ); - ( this->*( eventCallback_iffiiff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32871 : - typedef void ( idClass::*eventCallback_fffiiff_t )( const float, const float, const float, const int, const int, const float, const float ); - ( this->*( eventCallback_fffiiff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32872 : - typedef void ( idClass::*eventCallback_iiififf_t )( const int, const int, const int, const float, const int, const float, const float ); - ( this->*( eventCallback_iiififf_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32873 : - typedef void ( idClass::*eventCallback_fiififf_t )( const float, const int, const int, const float, const int, const float, const float ); - ( this->*( eventCallback_fiififf_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32874 : - typedef void ( idClass::*eventCallback_ifififf_t )( const int, const float, const int, const float, const int, const float, const float ); - ( this->*( eventCallback_ifififf_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32875 : - typedef void ( idClass::*eventCallback_ffififf_t )( const float, const float, const int, const float, const int, const float, const float ); - ( this->*( eventCallback_ffififf_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32876 : - typedef void ( idClass::*eventCallback_iiffiff_t )( const int, const int, const float, const float, const int, const float, const float ); - ( this->*( eventCallback_iiffiff_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32877 : - typedef void ( idClass::*eventCallback_fiffiff_t )( const float, const int, const float, const float, const int, const float, const float ); - ( this->*( eventCallback_fiffiff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32878 : - typedef void ( idClass::*eventCallback_ifffiff_t )( const int, const float, const float, const float, const int, const float, const float ); - ( this->*( eventCallback_ifffiff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32879 : - typedef void ( idClass::*eventCallback_ffffiff_t )( const float, const float, const float, const float, const int, const float, const float ); - ( this->*( eventCallback_ffffiff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32880 : - typedef void ( idClass::*eventCallback_iiiifff_t )( const int, const int, const int, const int, const float, const float, const float ); - ( this->*( eventCallback_iiiifff_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32881 : - typedef void ( idClass::*eventCallback_fiiifff_t )( const float, const int, const int, const int, const float, const float, const float ); - ( this->*( eventCallback_fiiifff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32882 : - typedef void ( idClass::*eventCallback_ifiifff_t )( const int, const float, const int, const int, const float, const float, const float ); - ( this->*( eventCallback_ifiifff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32883 : - typedef void ( idClass::*eventCallback_ffiifff_t )( const float, const float, const int, const int, const float, const float, const float ); - ( this->*( eventCallback_ffiifff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32884 : - typedef void ( idClass::*eventCallback_iififff_t )( const int, const int, const float, const int, const float, const float, const float ); - ( this->*( eventCallback_iififff_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32885 : - typedef void ( idClass::*eventCallback_fififff_t )( const float, const int, const float, const int, const float, const float, const float ); - ( this->*( eventCallback_fififff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32886 : - typedef void ( idClass::*eventCallback_iffifff_t )( const int, const float, const float, const int, const float, const float, const float ); - ( this->*( eventCallback_iffifff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32887 : - typedef void ( idClass::*eventCallback_fffifff_t )( const float, const float, const float, const int, const float, const float, const float ); - ( this->*( eventCallback_fffifff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32888 : - typedef void ( idClass::*eventCallback_iiiffff_t )( const int, const int, const int, const float, const float, const float, const float ); - ( this->*( eventCallback_iiiffff_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32889 : - typedef void ( idClass::*eventCallback_fiiffff_t )( const float, const int, const int, const float, const float, const float, const float ); - ( this->*( eventCallback_fiiffff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32890 : - typedef void ( idClass::*eventCallback_ififfff_t )( const int, const float, const int, const float, const float, const float, const float ); - ( this->*( eventCallback_ififfff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32891 : - typedef void ( idClass::*eventCallback_ffiffff_t )( const float, const float, const int, const float, const float, const float, const float ); - ( this->*( eventCallback_ffiffff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32892 : - typedef void ( idClass::*eventCallback_iifffff_t )( const int, const int, const float, const float, const float, const float, const float ); - ( this->*( eventCallback_iifffff_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32893 : - typedef void ( idClass::*eventCallback_fifffff_t )( const float, const int, const float, const float, const float, const float, const float ); - ( this->*( eventCallback_fifffff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32894 : - typedef void ( idClass::*eventCallback_iffffff_t )( const int, const float, const float, const float, const float, const float, const float ); - ( this->*( eventCallback_iffffff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - case 32895 : - typedef void ( idClass::*eventCallback_fffffff_t )( const float, const float, const float, const float, const float, const float, const float ); - ( this->*( eventCallback_fffffff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ] ); - break; - - /******************************************************* - - 8 args - - *******************************************************/ - - case 65536 : - typedef void ( idClass::*eventCallback_iiiiiiii_t )( const int, const int, const int, const int, const int, const int, const int, const int ); - ( this->*( eventCallback_iiiiiiii_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65537 : - typedef void ( idClass::*eventCallback_fiiiiiii_t )( const float, const int, const int, const int, const int, const int, const int, const int ); - ( this->*( eventCallback_fiiiiiii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65538 : - typedef void ( idClass::*eventCallback_ifiiiiii_t )( const int, const float, const int, const int, const int, const int, const int, const int ); - ( this->*( eventCallback_ifiiiiii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65539 : - typedef void ( idClass::*eventCallback_ffiiiiii_t )( const float, const float, const int, const int, const int, const int, const int, const int ); - ( this->*( eventCallback_ffiiiiii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65540 : - typedef void ( idClass::*eventCallback_iifiiiii_t )( const int, const int, const float, const int, const int, const int, const int, const int ); - ( this->*( eventCallback_iifiiiii_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65541 : - typedef void ( idClass::*eventCallback_fifiiiii_t )( const float, const int, const float, const int, const int, const int, const int, const int ); - ( this->*( eventCallback_fifiiiii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65542 : - typedef void ( idClass::*eventCallback_iffiiiii_t )( const int, const float, const float, const int, const int, const int, const int, const int ); - ( this->*( eventCallback_iffiiiii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65543 : - typedef void ( idClass::*eventCallback_fffiiiii_t )( const float, const float, const float, const int, const int, const int, const int, const int ); - ( this->*( eventCallback_fffiiiii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65544 : - typedef void ( idClass::*eventCallback_iiifiiii_t )( const int, const int, const int, const float, const int, const int, const int, const int ); - ( this->*( eventCallback_iiifiiii_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65545 : - typedef void ( idClass::*eventCallback_fiifiiii_t )( const float, const int, const int, const float, const int, const int, const int, const int ); - ( this->*( eventCallback_fiifiiii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65546 : - typedef void ( idClass::*eventCallback_ififiiii_t )( const int, const float, const int, const float, const int, const int, const int, const int ); - ( this->*( eventCallback_ififiiii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65547 : - typedef void ( idClass::*eventCallback_ffifiiii_t )( const float, const float, const int, const float, const int, const int, const int, const int ); - ( this->*( eventCallback_ffifiiii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65548 : - typedef void ( idClass::*eventCallback_iiffiiii_t )( const int, const int, const float, const float, const int, const int, const int, const int ); - ( this->*( eventCallback_iiffiiii_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65549 : - typedef void ( idClass::*eventCallback_fiffiiii_t )( const float, const int, const float, const float, const int, const int, const int, const int ); - ( this->*( eventCallback_fiffiiii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65550 : - typedef void ( idClass::*eventCallback_ifffiiii_t )( const int, const float, const float, const float, const int, const int, const int, const int ); - ( this->*( eventCallback_ifffiiii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65551 : - typedef void ( idClass::*eventCallback_ffffiiii_t )( const float, const float, const float, const float, const int, const int, const int, const int ); - ( this->*( eventCallback_ffffiiii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65552 : - typedef void ( idClass::*eventCallback_iiiifiii_t )( const int, const int, const int, const int, const float, const int, const int, const int ); - ( this->*( eventCallback_iiiifiii_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65553 : - typedef void ( idClass::*eventCallback_fiiifiii_t )( const float, const int, const int, const int, const float, const int, const int, const int ); - ( this->*( eventCallback_fiiifiii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65554 : - typedef void ( idClass::*eventCallback_ifiifiii_t )( const int, const float, const int, const int, const float, const int, const int, const int ); - ( this->*( eventCallback_ifiifiii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65555 : - typedef void ( idClass::*eventCallback_ffiifiii_t )( const float, const float, const int, const int, const float, const int, const int, const int ); - ( this->*( eventCallback_ffiifiii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65556 : - typedef void ( idClass::*eventCallback_iififiii_t )( const int, const int, const float, const int, const float, const int, const int, const int ); - ( this->*( eventCallback_iififiii_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65557 : - typedef void ( idClass::*eventCallback_fififiii_t )( const float, const int, const float, const int, const float, const int, const int, const int ); - ( this->*( eventCallback_fififiii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65558 : - typedef void ( idClass::*eventCallback_iffifiii_t )( const int, const float, const float, const int, const float, const int, const int, const int ); - ( this->*( eventCallback_iffifiii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65559 : - typedef void ( idClass::*eventCallback_fffifiii_t )( const float, const float, const float, const int, const float, const int, const int, const int ); - ( this->*( eventCallback_fffifiii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65560 : - typedef void ( idClass::*eventCallback_iiiffiii_t )( const int, const int, const int, const float, const float, const int, const int, const int ); - ( this->*( eventCallback_iiiffiii_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65561 : - typedef void ( idClass::*eventCallback_fiiffiii_t )( const float, const int, const int, const float, const float, const int, const int, const int ); - ( this->*( eventCallback_fiiffiii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65562 : - typedef void ( idClass::*eventCallback_ififfiii_t )( const int, const float, const int, const float, const float, const int, const int, const int ); - ( this->*( eventCallback_ififfiii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65563 : - typedef void ( idClass::*eventCallback_ffiffiii_t )( const float, const float, const int, const float, const float, const int, const int, const int ); - ( this->*( eventCallback_ffiffiii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65564 : - typedef void ( idClass::*eventCallback_iifffiii_t )( const int, const int, const float, const float, const float, const int, const int, const int ); - ( this->*( eventCallback_iifffiii_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65565 : - typedef void ( idClass::*eventCallback_fifffiii_t )( const float, const int, const float, const float, const float, const int, const int, const int ); - ( this->*( eventCallback_fifffiii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65566 : - typedef void ( idClass::*eventCallback_iffffiii_t )( const int, const float, const float, const float, const float, const int, const int, const int ); - ( this->*( eventCallback_iffffiii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65567 : - typedef void ( idClass::*eventCallback_fffffiii_t )( const float, const float, const float, const float, const float, const int, const int, const int ); - ( this->*( eventCallback_fffffiii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65568 : - typedef void ( idClass::*eventCallback_iiiiifii_t )( const int, const int, const int, const int, const int, const float, const int, const int ); - ( this->*( eventCallback_iiiiifii_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65569 : - typedef void ( idClass::*eventCallback_fiiiifii_t )( const float, const int, const int, const int, const int, const float, const int, const int ); - ( this->*( eventCallback_fiiiifii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65570 : - typedef void ( idClass::*eventCallback_ifiiifii_t )( const int, const float, const int, const int, const int, const float, const int, const int ); - ( this->*( eventCallback_ifiiifii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65571 : - typedef void ( idClass::*eventCallback_ffiiifii_t )( const float, const float, const int, const int, const int, const float, const int, const int ); - ( this->*( eventCallback_ffiiifii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65572 : - typedef void ( idClass::*eventCallback_iifiifii_t )( const int, const int, const float, const int, const int, const float, const int, const int ); - ( this->*( eventCallback_iifiifii_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65573 : - typedef void ( idClass::*eventCallback_fifiifii_t )( const float, const int, const float, const int, const int, const float, const int, const int ); - ( this->*( eventCallback_fifiifii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65574 : - typedef void ( idClass::*eventCallback_iffiifii_t )( const int, const float, const float, const int, const int, const float, const int, const int ); - ( this->*( eventCallback_iffiifii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65575 : - typedef void ( idClass::*eventCallback_fffiifii_t )( const float, const float, const float, const int, const int, const float, const int, const int ); - ( this->*( eventCallback_fffiifii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65576 : - typedef void ( idClass::*eventCallback_iiififii_t )( const int, const int, const int, const float, const int, const float, const int, const int ); - ( this->*( eventCallback_iiififii_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65577 : - typedef void ( idClass::*eventCallback_fiififii_t )( const float, const int, const int, const float, const int, const float, const int, const int ); - ( this->*( eventCallback_fiififii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65578 : - typedef void ( idClass::*eventCallback_ifififii_t )( const int, const float, const int, const float, const int, const float, const int, const int ); - ( this->*( eventCallback_ifififii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65579 : - typedef void ( idClass::*eventCallback_ffififii_t )( const float, const float, const int, const float, const int, const float, const int, const int ); - ( this->*( eventCallback_ffififii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65580 : - typedef void ( idClass::*eventCallback_iiffifii_t )( const int, const int, const float, const float, const int, const float, const int, const int ); - ( this->*( eventCallback_iiffifii_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65581 : - typedef void ( idClass::*eventCallback_fiffifii_t )( const float, const int, const float, const float, const int, const float, const int, const int ); - ( this->*( eventCallback_fiffifii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65582 : - typedef void ( idClass::*eventCallback_ifffifii_t )( const int, const float, const float, const float, const int, const float, const int, const int ); - ( this->*( eventCallback_ifffifii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65583 : - typedef void ( idClass::*eventCallback_ffffifii_t )( const float, const float, const float, const float, const int, const float, const int, const int ); - ( this->*( eventCallback_ffffifii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65584 : - typedef void ( idClass::*eventCallback_iiiiffii_t )( const int, const int, const int, const int, const float, const float, const int, const int ); - ( this->*( eventCallback_iiiiffii_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65585 : - typedef void ( idClass::*eventCallback_fiiiffii_t )( const float, const int, const int, const int, const float, const float, const int, const int ); - ( this->*( eventCallback_fiiiffii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65586 : - typedef void ( idClass::*eventCallback_ifiiffii_t )( const int, const float, const int, const int, const float, const float, const int, const int ); - ( this->*( eventCallback_ifiiffii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65587 : - typedef void ( idClass::*eventCallback_ffiiffii_t )( const float, const float, const int, const int, const float, const float, const int, const int ); - ( this->*( eventCallback_ffiiffii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65588 : - typedef void ( idClass::*eventCallback_iififfii_t )( const int, const int, const float, const int, const float, const float, const int, const int ); - ( this->*( eventCallback_iififfii_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65589 : - typedef void ( idClass::*eventCallback_fififfii_t )( const float, const int, const float, const int, const float, const float, const int, const int ); - ( this->*( eventCallback_fififfii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65590 : - typedef void ( idClass::*eventCallback_iffiffii_t )( const int, const float, const float, const int, const float, const float, const int, const int ); - ( this->*( eventCallback_iffiffii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65591 : - typedef void ( idClass::*eventCallback_fffiffii_t )( const float, const float, const float, const int, const float, const float, const int, const int ); - ( this->*( eventCallback_fffiffii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65592 : - typedef void ( idClass::*eventCallback_iiifffii_t )( const int, const int, const int, const float, const float, const float, const int, const int ); - ( this->*( eventCallback_iiifffii_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65593 : - typedef void ( idClass::*eventCallback_fiifffii_t )( const float, const int, const int, const float, const float, const float, const int, const int ); - ( this->*( eventCallback_fiifffii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65594 : - typedef void ( idClass::*eventCallback_ififffii_t )( const int, const float, const int, const float, const float, const float, const int, const int ); - ( this->*( eventCallback_ififffii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65595 : - typedef void ( idClass::*eventCallback_ffifffii_t )( const float, const float, const int, const float, const float, const float, const int, const int ); - ( this->*( eventCallback_ffifffii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65596 : - typedef void ( idClass::*eventCallback_iiffffii_t )( const int, const int, const float, const float, const float, const float, const int, const int ); - ( this->*( eventCallback_iiffffii_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65597 : - typedef void ( idClass::*eventCallback_fiffffii_t )( const float, const int, const float, const float, const float, const float, const int, const int ); - ( this->*( eventCallback_fiffffii_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65598 : - typedef void ( idClass::*eventCallback_ifffffii_t )( const int, const float, const float, const float, const float, const float, const int, const int ); - ( this->*( eventCallback_ifffffii_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65599 : - typedef void ( idClass::*eventCallback_ffffffii_t )( const float, const float, const float, const float, const float, const float, const int, const int ); - ( this->*( eventCallback_ffffffii_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], data[ 7 ] ); - break; - - case 65600 : - typedef void ( idClass::*eventCallback_iiiiiifi_t )( const int, const int, const int, const int, const int, const int, const float, const int ); - ( this->*( eventCallback_iiiiiifi_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65601 : - typedef void ( idClass::*eventCallback_fiiiiifi_t )( const float, const int, const int, const int, const int, const int, const float, const int ); - ( this->*( eventCallback_fiiiiifi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65602 : - typedef void ( idClass::*eventCallback_ifiiiifi_t )( const int, const float, const int, const int, const int, const int, const float, const int ); - ( this->*( eventCallback_ifiiiifi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65603 : - typedef void ( idClass::*eventCallback_ffiiiifi_t )( const float, const float, const int, const int, const int, const int, const float, const int ); - ( this->*( eventCallback_ffiiiifi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65604 : - typedef void ( idClass::*eventCallback_iifiiifi_t )( const int, const int, const float, const int, const int, const int, const float, const int ); - ( this->*( eventCallback_iifiiifi_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65605 : - typedef void ( idClass::*eventCallback_fifiiifi_t )( const float, const int, const float, const int, const int, const int, const float, const int ); - ( this->*( eventCallback_fifiiifi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65606 : - typedef void ( idClass::*eventCallback_iffiiifi_t )( const int, const float, const float, const int, const int, const int, const float, const int ); - ( this->*( eventCallback_iffiiifi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65607 : - typedef void ( idClass::*eventCallback_fffiiifi_t )( const float, const float, const float, const int, const int, const int, const float, const int ); - ( this->*( eventCallback_fffiiifi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65608 : - typedef void ( idClass::*eventCallback_iiifiifi_t )( const int, const int, const int, const float, const int, const int, const float, const int ); - ( this->*( eventCallback_iiifiifi_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65609 : - typedef void ( idClass::*eventCallback_fiifiifi_t )( const float, const int, const int, const float, const int, const int, const float, const int ); - ( this->*( eventCallback_fiifiifi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65610 : - typedef void ( idClass::*eventCallback_ififiifi_t )( const int, const float, const int, const float, const int, const int, const float, const int ); - ( this->*( eventCallback_ififiifi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65611 : - typedef void ( idClass::*eventCallback_ffifiifi_t )( const float, const float, const int, const float, const int, const int, const float, const int ); - ( this->*( eventCallback_ffifiifi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65612 : - typedef void ( idClass::*eventCallback_iiffiifi_t )( const int, const int, const float, const float, const int, const int, const float, const int ); - ( this->*( eventCallback_iiffiifi_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65613 : - typedef void ( idClass::*eventCallback_fiffiifi_t )( const float, const int, const float, const float, const int, const int, const float, const int ); - ( this->*( eventCallback_fiffiifi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65614 : - typedef void ( idClass::*eventCallback_ifffiifi_t )( const int, const float, const float, const float, const int, const int, const float, const int ); - ( this->*( eventCallback_ifffiifi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65615 : - typedef void ( idClass::*eventCallback_ffffiifi_t )( const float, const float, const float, const float, const int, const int, const float, const int ); - ( this->*( eventCallback_ffffiifi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65616 : - typedef void ( idClass::*eventCallback_iiiififi_t )( const int, const int, const int, const int, const float, const int, const float, const int ); - ( this->*( eventCallback_iiiififi_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65617 : - typedef void ( idClass::*eventCallback_fiiififi_t )( const float, const int, const int, const int, const float, const int, const float, const int ); - ( this->*( eventCallback_fiiififi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65618 : - typedef void ( idClass::*eventCallback_ifiififi_t )( const int, const float, const int, const int, const float, const int, const float, const int ); - ( this->*( eventCallback_ifiififi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65619 : - typedef void ( idClass::*eventCallback_ffiififi_t )( const float, const float, const int, const int, const float, const int, const float, const int ); - ( this->*( eventCallback_ffiififi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65620 : - typedef void ( idClass::*eventCallback_iifififi_t )( const int, const int, const float, const int, const float, const int, const float, const int ); - ( this->*( eventCallback_iifififi_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65621 : - typedef void ( idClass::*eventCallback_fifififi_t )( const float, const int, const float, const int, const float, const int, const float, const int ); - ( this->*( eventCallback_fifififi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65622 : - typedef void ( idClass::*eventCallback_iffififi_t )( const int, const float, const float, const int, const float, const int, const float, const int ); - ( this->*( eventCallback_iffififi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65623 : - typedef void ( idClass::*eventCallback_fffififi_t )( const float, const float, const float, const int, const float, const int, const float, const int ); - ( this->*( eventCallback_fffififi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65624 : - typedef void ( idClass::*eventCallback_iiiffifi_t )( const int, const int, const int, const float, const float, const int, const float, const int ); - ( this->*( eventCallback_iiiffifi_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65625 : - typedef void ( idClass::*eventCallback_fiiffifi_t )( const float, const int, const int, const float, const float, const int, const float, const int ); - ( this->*( eventCallback_fiiffifi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65626 : - typedef void ( idClass::*eventCallback_ififfifi_t )( const int, const float, const int, const float, const float, const int, const float, const int ); - ( this->*( eventCallback_ififfifi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65627 : - typedef void ( idClass::*eventCallback_ffiffifi_t )( const float, const float, const int, const float, const float, const int, const float, const int ); - ( this->*( eventCallback_ffiffifi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65628 : - typedef void ( idClass::*eventCallback_iifffifi_t )( const int, const int, const float, const float, const float, const int, const float, const int ); - ( this->*( eventCallback_iifffifi_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65629 : - typedef void ( idClass::*eventCallback_fifffifi_t )( const float, const int, const float, const float, const float, const int, const float, const int ); - ( this->*( eventCallback_fifffifi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65630 : - typedef void ( idClass::*eventCallback_iffffifi_t )( const int, const float, const float, const float, const float, const int, const float, const int ); - ( this->*( eventCallback_iffffifi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65631 : - typedef void ( idClass::*eventCallback_fffffifi_t )( const float, const float, const float, const float, const float, const int, const float, const int ); - ( this->*( eventCallback_fffffifi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65632 : - typedef void ( idClass::*eventCallback_iiiiiffi_t )( const int, const int, const int, const int, const int, const float, const float, const int ); - ( this->*( eventCallback_iiiiiffi_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65633 : - typedef void ( idClass::*eventCallback_fiiiiffi_t )( const float, const int, const int, const int, const int, const float, const float, const int ); - ( this->*( eventCallback_fiiiiffi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65634 : - typedef void ( idClass::*eventCallback_ifiiiffi_t )( const int, const float, const int, const int, const int, const float, const float, const int ); - ( this->*( eventCallback_ifiiiffi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65635 : - typedef void ( idClass::*eventCallback_ffiiiffi_t )( const float, const float, const int, const int, const int, const float, const float, const int ); - ( this->*( eventCallback_ffiiiffi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65636 : - typedef void ( idClass::*eventCallback_iifiiffi_t )( const int, const int, const float, const int, const int, const float, const float, const int ); - ( this->*( eventCallback_iifiiffi_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65637 : - typedef void ( idClass::*eventCallback_fifiiffi_t )( const float, const int, const float, const int, const int, const float, const float, const int ); - ( this->*( eventCallback_fifiiffi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65638 : - typedef void ( idClass::*eventCallback_iffiiffi_t )( const int, const float, const float, const int, const int, const float, const float, const int ); - ( this->*( eventCallback_iffiiffi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65639 : - typedef void ( idClass::*eventCallback_fffiiffi_t )( const float, const float, const float, const int, const int, const float, const float, const int ); - ( this->*( eventCallback_fffiiffi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65640 : - typedef void ( idClass::*eventCallback_iiififfi_t )( const int, const int, const int, const float, const int, const float, const float, const int ); - ( this->*( eventCallback_iiififfi_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65641 : - typedef void ( idClass::*eventCallback_fiififfi_t )( const float, const int, const int, const float, const int, const float, const float, const int ); - ( this->*( eventCallback_fiififfi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65642 : - typedef void ( idClass::*eventCallback_ifififfi_t )( const int, const float, const int, const float, const int, const float, const float, const int ); - ( this->*( eventCallback_ifififfi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65643 : - typedef void ( idClass::*eventCallback_ffififfi_t )( const float, const float, const int, const float, const int, const float, const float, const int ); - ( this->*( eventCallback_ffififfi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65644 : - typedef void ( idClass::*eventCallback_iiffiffi_t )( const int, const int, const float, const float, const int, const float, const float, const int ); - ( this->*( eventCallback_iiffiffi_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65645 : - typedef void ( idClass::*eventCallback_fiffiffi_t )( const float, const int, const float, const float, const int, const float, const float, const int ); - ( this->*( eventCallback_fiffiffi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65646 : - typedef void ( idClass::*eventCallback_ifffiffi_t )( const int, const float, const float, const float, const int, const float, const float, const int ); - ( this->*( eventCallback_ifffiffi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65647 : - typedef void ( idClass::*eventCallback_ffffiffi_t )( const float, const float, const float, const float, const int, const float, const float, const int ); - ( this->*( eventCallback_ffffiffi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65648 : - typedef void ( idClass::*eventCallback_iiiifffi_t )( const int, const int, const int, const int, const float, const float, const float, const int ); - ( this->*( eventCallback_iiiifffi_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65649 : - typedef void ( idClass::*eventCallback_fiiifffi_t )( const float, const int, const int, const int, const float, const float, const float, const int ); - ( this->*( eventCallback_fiiifffi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65650 : - typedef void ( idClass::*eventCallback_ifiifffi_t )( const int, const float, const int, const int, const float, const float, const float, const int ); - ( this->*( eventCallback_ifiifffi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65651 : - typedef void ( idClass::*eventCallback_ffiifffi_t )( const float, const float, const int, const int, const float, const float, const float, const int ); - ( this->*( eventCallback_ffiifffi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65652 : - typedef void ( idClass::*eventCallback_iififffi_t )( const int, const int, const float, const int, const float, const float, const float, const int ); - ( this->*( eventCallback_iififffi_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65653 : - typedef void ( idClass::*eventCallback_fififffi_t )( const float, const int, const float, const int, const float, const float, const float, const int ); - ( this->*( eventCallback_fififffi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65654 : - typedef void ( idClass::*eventCallback_iffifffi_t )( const int, const float, const float, const int, const float, const float, const float, const int ); - ( this->*( eventCallback_iffifffi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65655 : - typedef void ( idClass::*eventCallback_fffifffi_t )( const float, const float, const float, const int, const float, const float, const float, const int ); - ( this->*( eventCallback_fffifffi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65656 : - typedef void ( idClass::*eventCallback_iiiffffi_t )( const int, const int, const int, const float, const float, const float, const float, const int ); - ( this->*( eventCallback_iiiffffi_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65657 : - typedef void ( idClass::*eventCallback_fiiffffi_t )( const float, const int, const int, const float, const float, const float, const float, const int ); - ( this->*( eventCallback_fiiffffi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65658 : - typedef void ( idClass::*eventCallback_ififfffi_t )( const int, const float, const int, const float, const float, const float, const float, const int ); - ( this->*( eventCallback_ififfffi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65659 : - typedef void ( idClass::*eventCallback_ffiffffi_t )( const float, const float, const int, const float, const float, const float, const float, const int ); - ( this->*( eventCallback_ffiffffi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65660 : - typedef void ( idClass::*eventCallback_iifffffi_t )( const int, const int, const float, const float, const float, const float, const float, const int ); - ( this->*( eventCallback_iifffffi_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65661 : - typedef void ( idClass::*eventCallback_fifffffi_t )( const float, const int, const float, const float, const float, const float, const float, const int ); - ( this->*( eventCallback_fifffffi_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65662 : - typedef void ( idClass::*eventCallback_iffffffi_t )( const int, const float, const float, const float, const float, const float, const float, const int ); - ( this->*( eventCallback_iffffffi_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65663 : - typedef void ( idClass::*eventCallback_fffffffi_t )( const float, const float, const float, const float, const float, const float, const float, const int ); - ( this->*( eventCallback_fffffffi_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], data[ 7 ] ); - break; - - case 65664 : - typedef void ( idClass::*eventCallback_iiiiiiif_t )( const int, const int, const int, const int, const int, const int, const int, const float ); - ( this->*( eventCallback_iiiiiiif_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65665 : - typedef void ( idClass::*eventCallback_fiiiiiif_t )( const float, const int, const int, const int, const int, const int, const int, const float ); - ( this->*( eventCallback_fiiiiiif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65666 : - typedef void ( idClass::*eventCallback_ifiiiiif_t )( const int, const float, const int, const int, const int, const int, const int, const float ); - ( this->*( eventCallback_ifiiiiif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65667 : - typedef void ( idClass::*eventCallback_ffiiiiif_t )( const float, const float, const int, const int, const int, const int, const int, const float ); - ( this->*( eventCallback_ffiiiiif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65668 : - typedef void ( idClass::*eventCallback_iifiiiif_t )( const int, const int, const float, const int, const int, const int, const int, const float ); - ( this->*( eventCallback_iifiiiif_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65669 : - typedef void ( idClass::*eventCallback_fifiiiif_t )( const float, const int, const float, const int, const int, const int, const int, const float ); - ( this->*( eventCallback_fifiiiif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65670 : - typedef void ( idClass::*eventCallback_iffiiiif_t )( const int, const float, const float, const int, const int, const int, const int, const float ); - ( this->*( eventCallback_iffiiiif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65671 : - typedef void ( idClass::*eventCallback_fffiiiif_t )( const float, const float, const float, const int, const int, const int, const int, const float ); - ( this->*( eventCallback_fffiiiif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65672 : - typedef void ( idClass::*eventCallback_iiifiiif_t )( const int, const int, const int, const float, const int, const int, const int, const float ); - ( this->*( eventCallback_iiifiiif_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65673 : - typedef void ( idClass::*eventCallback_fiifiiif_t )( const float, const int, const int, const float, const int, const int, const int, const float ); - ( this->*( eventCallback_fiifiiif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65674 : - typedef void ( idClass::*eventCallback_ififiiif_t )( const int, const float, const int, const float, const int, const int, const int, const float ); - ( this->*( eventCallback_ififiiif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65675 : - typedef void ( idClass::*eventCallback_ffifiiif_t )( const float, const float, const int, const float, const int, const int, const int, const float ); - ( this->*( eventCallback_ffifiiif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65676 : - typedef void ( idClass::*eventCallback_iiffiiif_t )( const int, const int, const float, const float, const int, const int, const int, const float ); - ( this->*( eventCallback_iiffiiif_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65677 : - typedef void ( idClass::*eventCallback_fiffiiif_t )( const float, const int, const float, const float, const int, const int, const int, const float ); - ( this->*( eventCallback_fiffiiif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65678 : - typedef void ( idClass::*eventCallback_ifffiiif_t )( const int, const float, const float, const float, const int, const int, const int, const float ); - ( this->*( eventCallback_ifffiiif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65679 : - typedef void ( idClass::*eventCallback_ffffiiif_t )( const float, const float, const float, const float, const int, const int, const int, const float ); - ( this->*( eventCallback_ffffiiif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65680 : - typedef void ( idClass::*eventCallback_iiiifiif_t )( const int, const int, const int, const int, const float, const int, const int, const float ); - ( this->*( eventCallback_iiiifiif_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65681 : - typedef void ( idClass::*eventCallback_fiiifiif_t )( const float, const int, const int, const int, const float, const int, const int, const float ); - ( this->*( eventCallback_fiiifiif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65682 : - typedef void ( idClass::*eventCallback_ifiifiif_t )( const int, const float, const int, const int, const float, const int, const int, const float ); - ( this->*( eventCallback_ifiifiif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65683 : - typedef void ( idClass::*eventCallback_ffiifiif_t )( const float, const float, const int, const int, const float, const int, const int, const float ); - ( this->*( eventCallback_ffiifiif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65684 : - typedef void ( idClass::*eventCallback_iififiif_t )( const int, const int, const float, const int, const float, const int, const int, const float ); - ( this->*( eventCallback_iififiif_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65685 : - typedef void ( idClass::*eventCallback_fififiif_t )( const float, const int, const float, const int, const float, const int, const int, const float ); - ( this->*( eventCallback_fififiif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65686 : - typedef void ( idClass::*eventCallback_iffifiif_t )( const int, const float, const float, const int, const float, const int, const int, const float ); - ( this->*( eventCallback_iffifiif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65687 : - typedef void ( idClass::*eventCallback_fffifiif_t )( const float, const float, const float, const int, const float, const int, const int, const float ); - ( this->*( eventCallback_fffifiif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65688 : - typedef void ( idClass::*eventCallback_iiiffiif_t )( const int, const int, const int, const float, const float, const int, const int, const float ); - ( this->*( eventCallback_iiiffiif_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65689 : - typedef void ( idClass::*eventCallback_fiiffiif_t )( const float, const int, const int, const float, const float, const int, const int, const float ); - ( this->*( eventCallback_fiiffiif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65690 : - typedef void ( idClass::*eventCallback_ififfiif_t )( const int, const float, const int, const float, const float, const int, const int, const float ); - ( this->*( eventCallback_ififfiif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65691 : - typedef void ( idClass::*eventCallback_ffiffiif_t )( const float, const float, const int, const float, const float, const int, const int, const float ); - ( this->*( eventCallback_ffiffiif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65692 : - typedef void ( idClass::*eventCallback_iifffiif_t )( const int, const int, const float, const float, const float, const int, const int, const float ); - ( this->*( eventCallback_iifffiif_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65693 : - typedef void ( idClass::*eventCallback_fifffiif_t )( const float, const int, const float, const float, const float, const int, const int, const float ); - ( this->*( eventCallback_fifffiif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65694 : - typedef void ( idClass::*eventCallback_iffffiif_t )( const int, const float, const float, const float, const float, const int, const int, const float ); - ( this->*( eventCallback_iffffiif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65695 : - typedef void ( idClass::*eventCallback_fffffiif_t )( const float, const float, const float, const float, const float, const int, const int, const float ); - ( this->*( eventCallback_fffffiif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65696 : - typedef void ( idClass::*eventCallback_iiiiifif_t )( const int, const int, const int, const int, const int, const float, const int, const float ); - ( this->*( eventCallback_iiiiifif_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65697 : - typedef void ( idClass::*eventCallback_fiiiifif_t )( const float, const int, const int, const int, const int, const float, const int, const float ); - ( this->*( eventCallback_fiiiifif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65698 : - typedef void ( idClass::*eventCallback_ifiiifif_t )( const int, const float, const int, const int, const int, const float, const int, const float ); - ( this->*( eventCallback_ifiiifif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65699 : - typedef void ( idClass::*eventCallback_ffiiifif_t )( const float, const float, const int, const int, const int, const float, const int, const float ); - ( this->*( eventCallback_ffiiifif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65700 : - typedef void ( idClass::*eventCallback_iifiifif_t )( const int, const int, const float, const int, const int, const float, const int, const float ); - ( this->*( eventCallback_iifiifif_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65701 : - typedef void ( idClass::*eventCallback_fifiifif_t )( const float, const int, const float, const int, const int, const float, const int, const float ); - ( this->*( eventCallback_fifiifif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65702 : - typedef void ( idClass::*eventCallback_iffiifif_t )( const int, const float, const float, const int, const int, const float, const int, const float ); - ( this->*( eventCallback_iffiifif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65703 : - typedef void ( idClass::*eventCallback_fffiifif_t )( const float, const float, const float, const int, const int, const float, const int, const float ); - ( this->*( eventCallback_fffiifif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65704 : - typedef void ( idClass::*eventCallback_iiififif_t )( const int, const int, const int, const float, const int, const float, const int, const float ); - ( this->*( eventCallback_iiififif_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65705 : - typedef void ( idClass::*eventCallback_fiififif_t )( const float, const int, const int, const float, const int, const float, const int, const float ); - ( this->*( eventCallback_fiififif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65706 : - typedef void ( idClass::*eventCallback_ifififif_t )( const int, const float, const int, const float, const int, const float, const int, const float ); - ( this->*( eventCallback_ifififif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65707 : - typedef void ( idClass::*eventCallback_ffififif_t )( const float, const float, const int, const float, const int, const float, const int, const float ); - ( this->*( eventCallback_ffififif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65708 : - typedef void ( idClass::*eventCallback_iiffifif_t )( const int, const int, const float, const float, const int, const float, const int, const float ); - ( this->*( eventCallback_iiffifif_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65709 : - typedef void ( idClass::*eventCallback_fiffifif_t )( const float, const int, const float, const float, const int, const float, const int, const float ); - ( this->*( eventCallback_fiffifif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65710 : - typedef void ( idClass::*eventCallback_ifffifif_t )( const int, const float, const float, const float, const int, const float, const int, const float ); - ( this->*( eventCallback_ifffifif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65711 : - typedef void ( idClass::*eventCallback_ffffifif_t )( const float, const float, const float, const float, const int, const float, const int, const float ); - ( this->*( eventCallback_ffffifif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65712 : - typedef void ( idClass::*eventCallback_iiiiffif_t )( const int, const int, const int, const int, const float, const float, const int, const float ); - ( this->*( eventCallback_iiiiffif_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65713 : - typedef void ( idClass::*eventCallback_fiiiffif_t )( const float, const int, const int, const int, const float, const float, const int, const float ); - ( this->*( eventCallback_fiiiffif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65714 : - typedef void ( idClass::*eventCallback_ifiiffif_t )( const int, const float, const int, const int, const float, const float, const int, const float ); - ( this->*( eventCallback_ifiiffif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65715 : - typedef void ( idClass::*eventCallback_ffiiffif_t )( const float, const float, const int, const int, const float, const float, const int, const float ); - ( this->*( eventCallback_ffiiffif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65716 : - typedef void ( idClass::*eventCallback_iififfif_t )( const int, const int, const float, const int, const float, const float, const int, const float ); - ( this->*( eventCallback_iififfif_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65717 : - typedef void ( idClass::*eventCallback_fififfif_t )( const float, const int, const float, const int, const float, const float, const int, const float ); - ( this->*( eventCallback_fififfif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65718 : - typedef void ( idClass::*eventCallback_iffiffif_t )( const int, const float, const float, const int, const float, const float, const int, const float ); - ( this->*( eventCallback_iffiffif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65719 : - typedef void ( idClass::*eventCallback_fffiffif_t )( const float, const float, const float, const int, const float, const float, const int, const float ); - ( this->*( eventCallback_fffiffif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65720 : - typedef void ( idClass::*eventCallback_iiifffif_t )( const int, const int, const int, const float, const float, const float, const int, const float ); - ( this->*( eventCallback_iiifffif_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65721 : - typedef void ( idClass::*eventCallback_fiifffif_t )( const float, const int, const int, const float, const float, const float, const int, const float ); - ( this->*( eventCallback_fiifffif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65722 : - typedef void ( idClass::*eventCallback_ififffif_t )( const int, const float, const int, const float, const float, const float, const int, const float ); - ( this->*( eventCallback_ififffif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65723 : - typedef void ( idClass::*eventCallback_ffifffif_t )( const float, const float, const int, const float, const float, const float, const int, const float ); - ( this->*( eventCallback_ffifffif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65724 : - typedef void ( idClass::*eventCallback_iiffffif_t )( const int, const int, const float, const float, const float, const float, const int, const float ); - ( this->*( eventCallback_iiffffif_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65725 : - typedef void ( idClass::*eventCallback_fiffffif_t )( const float, const int, const float, const float, const float, const float, const int, const float ); - ( this->*( eventCallback_fiffffif_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65726 : - typedef void ( idClass::*eventCallback_ifffffif_t )( const int, const float, const float, const float, const float, const float, const int, const float ); - ( this->*( eventCallback_ifffffif_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65727 : - typedef void ( idClass::*eventCallback_ffffffif_t )( const float, const float, const float, const float, const float, const float, const int, const float ); - ( this->*( eventCallback_ffffffif_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65728 : - typedef void ( idClass::*eventCallback_iiiiiiff_t )( const int, const int, const int, const int, const int, const int, const float, const float ); - ( this->*( eventCallback_iiiiiiff_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65729 : - typedef void ( idClass::*eventCallback_fiiiiiff_t )( const float, const int, const int, const int, const int, const int, const float, const float ); - ( this->*( eventCallback_fiiiiiff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65730 : - typedef void ( idClass::*eventCallback_ifiiiiff_t )( const int, const float, const int, const int, const int, const int, const float, const float ); - ( this->*( eventCallback_ifiiiiff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65731 : - typedef void ( idClass::*eventCallback_ffiiiiff_t )( const float, const float, const int, const int, const int, const int, const float, const float ); - ( this->*( eventCallback_ffiiiiff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65732 : - typedef void ( idClass::*eventCallback_iifiiiff_t )( const int, const int, const float, const int, const int, const int, const float, const float ); - ( this->*( eventCallback_iifiiiff_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65733 : - typedef void ( idClass::*eventCallback_fifiiiff_t )( const float, const int, const float, const int, const int, const int, const float, const float ); - ( this->*( eventCallback_fifiiiff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65734 : - typedef void ( idClass::*eventCallback_iffiiiff_t )( const int, const float, const float, const int, const int, const int, const float, const float ); - ( this->*( eventCallback_iffiiiff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65735 : - typedef void ( idClass::*eventCallback_fffiiiff_t )( const float, const float, const float, const int, const int, const int, const float, const float ); - ( this->*( eventCallback_fffiiiff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65736 : - typedef void ( idClass::*eventCallback_iiifiiff_t )( const int, const int, const int, const float, const int, const int, const float, const float ); - ( this->*( eventCallback_iiifiiff_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65737 : - typedef void ( idClass::*eventCallback_fiifiiff_t )( const float, const int, const int, const float, const int, const int, const float, const float ); - ( this->*( eventCallback_fiifiiff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65738 : - typedef void ( idClass::*eventCallback_ififiiff_t )( const int, const float, const int, const float, const int, const int, const float, const float ); - ( this->*( eventCallback_ififiiff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65739 : - typedef void ( idClass::*eventCallback_ffifiiff_t )( const float, const float, const int, const float, const int, const int, const float, const float ); - ( this->*( eventCallback_ffifiiff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65740 : - typedef void ( idClass::*eventCallback_iiffiiff_t )( const int, const int, const float, const float, const int, const int, const float, const float ); - ( this->*( eventCallback_iiffiiff_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65741 : - typedef void ( idClass::*eventCallback_fiffiiff_t )( const float, const int, const float, const float, const int, const int, const float, const float ); - ( this->*( eventCallback_fiffiiff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65742 : - typedef void ( idClass::*eventCallback_ifffiiff_t )( const int, const float, const float, const float, const int, const int, const float, const float ); - ( this->*( eventCallback_ifffiiff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65743 : - typedef void ( idClass::*eventCallback_ffffiiff_t )( const float, const float, const float, const float, const int, const int, const float, const float ); - ( this->*( eventCallback_ffffiiff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65744 : - typedef void ( idClass::*eventCallback_iiiififf_t )( const int, const int, const int, const int, const float, const int, const float, const float ); - ( this->*( eventCallback_iiiififf_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65745 : - typedef void ( idClass::*eventCallback_fiiififf_t )( const float, const int, const int, const int, const float, const int, const float, const float ); - ( this->*( eventCallback_fiiififf_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65746 : - typedef void ( idClass::*eventCallback_ifiififf_t )( const int, const float, const int, const int, const float, const int, const float, const float ); - ( this->*( eventCallback_ifiififf_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65747 : - typedef void ( idClass::*eventCallback_ffiififf_t )( const float, const float, const int, const int, const float, const int, const float, const float ); - ( this->*( eventCallback_ffiififf_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65748 : - typedef void ( idClass::*eventCallback_iifififf_t )( const int, const int, const float, const int, const float, const int, const float, const float ); - ( this->*( eventCallback_iifififf_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65749 : - typedef void ( idClass::*eventCallback_fifififf_t )( const float, const int, const float, const int, const float, const int, const float, const float ); - ( this->*( eventCallback_fifififf_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65750 : - typedef void ( idClass::*eventCallback_iffififf_t )( const int, const float, const float, const int, const float, const int, const float, const float ); - ( this->*( eventCallback_iffififf_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65751 : - typedef void ( idClass::*eventCallback_fffififf_t )( const float, const float, const float, const int, const float, const int, const float, const float ); - ( this->*( eventCallback_fffififf_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65752 : - typedef void ( idClass::*eventCallback_iiiffiff_t )( const int, const int, const int, const float, const float, const int, const float, const float ); - ( this->*( eventCallback_iiiffiff_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65753 : - typedef void ( idClass::*eventCallback_fiiffiff_t )( const float, const int, const int, const float, const float, const int, const float, const float ); - ( this->*( eventCallback_fiiffiff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65754 : - typedef void ( idClass::*eventCallback_ififfiff_t )( const int, const float, const int, const float, const float, const int, const float, const float ); - ( this->*( eventCallback_ififfiff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65755 : - typedef void ( idClass::*eventCallback_ffiffiff_t )( const float, const float, const int, const float, const float, const int, const float, const float ); - ( this->*( eventCallback_ffiffiff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65756 : - typedef void ( idClass::*eventCallback_iifffiff_t )( const int, const int, const float, const float, const float, const int, const float, const float ); - ( this->*( eventCallback_iifffiff_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65757 : - typedef void ( idClass::*eventCallback_fifffiff_t )( const float, const int, const float, const float, const float, const int, const float, const float ); - ( this->*( eventCallback_fifffiff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65758 : - typedef void ( idClass::*eventCallback_iffffiff_t )( const int, const float, const float, const float, const float, const int, const float, const float ); - ( this->*( eventCallback_iffffiff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65759 : - typedef void ( idClass::*eventCallback_fffffiff_t )( const float, const float, const float, const float, const float, const int, const float, const float ); - ( this->*( eventCallback_fffffiff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65760 : - typedef void ( idClass::*eventCallback_iiiiifff_t )( const int, const int, const int, const int, const int, const float, const float, const float ); - ( this->*( eventCallback_iiiiifff_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65761 : - typedef void ( idClass::*eventCallback_fiiiifff_t )( const float, const int, const int, const int, const int, const float, const float, const float ); - ( this->*( eventCallback_fiiiifff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65762 : - typedef void ( idClass::*eventCallback_ifiiifff_t )( const int, const float, const int, const int, const int, const float, const float, const float ); - ( this->*( eventCallback_ifiiifff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65763 : - typedef void ( idClass::*eventCallback_ffiiifff_t )( const float, const float, const int, const int, const int, const float, const float, const float ); - ( this->*( eventCallback_ffiiifff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65764 : - typedef void ( idClass::*eventCallback_iifiifff_t )( const int, const int, const float, const int, const int, const float, const float, const float ); - ( this->*( eventCallback_iifiifff_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65765 : - typedef void ( idClass::*eventCallback_fifiifff_t )( const float, const int, const float, const int, const int, const float, const float, const float ); - ( this->*( eventCallback_fifiifff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65766 : - typedef void ( idClass::*eventCallback_iffiifff_t )( const int, const float, const float, const int, const int, const float, const float, const float ); - ( this->*( eventCallback_iffiifff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65767 : - typedef void ( idClass::*eventCallback_fffiifff_t )( const float, const float, const float, const int, const int, const float, const float, const float ); - ( this->*( eventCallback_fffiifff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65768 : - typedef void ( idClass::*eventCallback_iiififff_t )( const int, const int, const int, const float, const int, const float, const float, const float ); - ( this->*( eventCallback_iiififff_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65769 : - typedef void ( idClass::*eventCallback_fiififff_t )( const float, const int, const int, const float, const int, const float, const float, const float ); - ( this->*( eventCallback_fiififff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65770 : - typedef void ( idClass::*eventCallback_ifififff_t )( const int, const float, const int, const float, const int, const float, const float, const float ); - ( this->*( eventCallback_ifififff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65771 : - typedef void ( idClass::*eventCallback_ffififff_t )( const float, const float, const int, const float, const int, const float, const float, const float ); - ( this->*( eventCallback_ffififff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65772 : - typedef void ( idClass::*eventCallback_iiffifff_t )( const int, const int, const float, const float, const int, const float, const float, const float ); - ( this->*( eventCallback_iiffifff_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65773 : - typedef void ( idClass::*eventCallback_fiffifff_t )( const float, const int, const float, const float, const int, const float, const float, const float ); - ( this->*( eventCallback_fiffifff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65774 : - typedef void ( idClass::*eventCallback_ifffifff_t )( const int, const float, const float, const float, const int, const float, const float, const float ); - ( this->*( eventCallback_ifffifff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65775 : - typedef void ( idClass::*eventCallback_ffffifff_t )( const float, const float, const float, const float, const int, const float, const float, const float ); - ( this->*( eventCallback_ffffifff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65776 : - typedef void ( idClass::*eventCallback_iiiiffff_t )( const int, const int, const int, const int, const float, const float, const float, const float ); - ( this->*( eventCallback_iiiiffff_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65777 : - typedef void ( idClass::*eventCallback_fiiiffff_t )( const float, const int, const int, const int, const float, const float, const float, const float ); - ( this->*( eventCallback_fiiiffff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65778 : - typedef void ( idClass::*eventCallback_ifiiffff_t )( const int, const float, const int, const int, const float, const float, const float, const float ); - ( this->*( eventCallback_ifiiffff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65779 : - typedef void ( idClass::*eventCallback_ffiiffff_t )( const float, const float, const int, const int, const float, const float, const float, const float ); - ( this->*( eventCallback_ffiiffff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65780 : - typedef void ( idClass::*eventCallback_iififfff_t )( const int, const int, const float, const int, const float, const float, const float, const float ); - ( this->*( eventCallback_iififfff_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65781 : - typedef void ( idClass::*eventCallback_fififfff_t )( const float, const int, const float, const int, const float, const float, const float, const float ); - ( this->*( eventCallback_fififfff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65782 : - typedef void ( idClass::*eventCallback_iffiffff_t )( const int, const float, const float, const int, const float, const float, const float, const float ); - ( this->*( eventCallback_iffiffff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65783 : - typedef void ( idClass::*eventCallback_fffiffff_t )( const float, const float, const float, const int, const float, const float, const float, const float ); - ( this->*( eventCallback_fffiffff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65784 : - typedef void ( idClass::*eventCallback_iiifffff_t )( const int, const int, const int, const float, const float, const float, const float, const float ); - ( this->*( eventCallback_iiifffff_t )callback )( data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65785 : - typedef void ( idClass::*eventCallback_fiifffff_t )( const float, const int, const int, const float, const float, const float, const float, const float ); - ( this->*( eventCallback_fiifffff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65786 : - typedef void ( idClass::*eventCallback_ififffff_t )( const int, const float, const int, const float, const float, const float, const float, const float ); - ( this->*( eventCallback_ififffff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65787 : - typedef void ( idClass::*eventCallback_ffifffff_t )( const float, const float, const int, const float, const float, const float, const float, const float ); - ( this->*( eventCallback_ffifffff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65788 : - typedef void ( idClass::*eventCallback_iiffffff_t )( const int, const int, const float, const float, const float, const float, const float, const float ); - ( this->*( eventCallback_iiffffff_t )callback )( data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65789 : - typedef void ( idClass::*eventCallback_fiffffff_t )( const float, const int, const float, const float, const float, const float, const float, const float ); - ( this->*( eventCallback_fiffffff_t )callback )( *( float * )&data[ 0 ], data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65790 : - typedef void ( idClass::*eventCallback_ifffffff_t )( const int, const float, const float, const float, const float, const float, const float, const float ); - ( this->*( eventCallback_ifffffff_t )callback )( data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - - case 65791 : - typedef void ( idClass::*eventCallback_ffffffff_t )( const float, const float, const float, const float, const float, const float, const float, const float ); - ( this->*( eventCallback_ffffffff_t )callback )( *( float * )&data[ 0 ], *( float * )&data[ 1 ], *( float * )&data[ 2 ], *( float * )&data[ 3 ], *( float * )&data[ 4 ], *( float * )&data[ 5 ], *( float * )&data[ 6 ], *( float * )&data[ 7 ] ); - break; - diff --git a/src/game/gamesys/Class.cpp b/src/game/gamesys/Class.cpp index 997eabf..afbdc2a 100644 --- a/src/game/gamesys/Class.cpp +++ b/src/game/gamesys/Class.cpp @@ -34,11 +34,7 @@ instancing of objects. #include "../Game_local.h" -#ifdef _WIN32 -#include "TypeInfo.h" -#else #include "NoGameTypeInfo.h" -#endif /*********************************************************************** diff --git a/src/game/gamesys/SaveGame.cpp b/src/game/gamesys/SaveGame.cpp index 5ff09bf..d80c8b2 100644 --- a/src/game/gamesys/SaveGame.cpp +++ b/src/game/gamesys/SaveGame.cpp @@ -27,11 +27,7 @@ along with Quake 4 Reconstructed Source Code. If not, see spawnArgs.GetNumKeyVals(); i++ ) { const idKeyValue *kv = ent->spawnArgs.GetKeyVal( i ); - gameLocal.Printf( "\"%s\" "S_COLOR_WHITE"\"%s\"\n", kv->GetKey().c_str(), kv->GetValue().c_str() ); + gameLocal.Printf( "\"%s\" " S_COLOR_WHITE "\"%s\"\n", kv->GetKey().c_str(), kv->GetValue().c_str() ); } } diff --git a/src/game/physics/Clip.cpp b/src/game/physics/Clip.cpp index 16776e4..5a632ac 100644 --- a/src/game/physics/Clip.cpp +++ b/src/game/physics/Clip.cpp @@ -1239,7 +1239,6 @@ void idClip::GetClipSectorsStaticContents( void ) { for( y = 0; y < CLIPSECTOR_WIDTH; y++ ) { org.x = ( x / nodeScale.x ) + nodeOffset.x; org.y = ( y / nodeScale.y ) + nodeOffset.y; - int contents = collisionModelManager->Contents( org, trm, mat3_identity, -1, world, vec3_origin, mat3_default ); clipSectors[ x + ( y << CLIPSECTOR_DEPTH ) ].contents = contents; } diff --git a/src/idlib/CMakeLists.txt b/src/idlib/CMakeLists.txt index 6af8e79..41e4345 100644 --- a/src/idlib/CMakeLists.txt +++ b/src/idlib/CMakeLists.txt @@ -76,3 +76,42 @@ set_target_properties(q4_idlib PROPERTIES OUTPUT_NAME idlib FOLDER "Engine" ) + +# The Quake 4 SDK builds idlib a second time with Q4SDK for gamex86.dll. +# Several public classes (notably the SIMD hierarchy) are macro-sensitive, so +# linking the engine-private idlib into the game DLL gives the DLL a different +# vtable layout than the one seen by its game translation units. +set(Q4_GAME_IDLIB_SOURCES + ${Q4_IDLIB_SOURCES} + geometry/Winding2D.cpp + math/Lcp.cpp + math/Ode.cpp +) + +add_library(q4_game_idlib STATIC ${Q4_GAME_IDLIB_SOURCES}) + +target_include_directories(q4_game_idlib + PUBLIC + ${PROJECT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} + PRIVATE + "C:/Program Files (x86)/Microsoft DirectX SDK (June 2010)/Include" +) + +target_compile_definitions(q4_game_idlib + PRIVATE + WIN32 + _WINDOWS + _USE_32BIT_TIME_T + Q4SDK + Q4_NO_PUNKBUSTER + $<$:_DEBUG> + $<$:NDEBUG;_FINAL> +) + +target_precompile_headers(q4_game_idlib PRIVATE precompiled.h) + +set_target_properties(q4_game_idlib PROPERTIES + OUTPUT_NAME game_idlib + FOLDER "Game" +) diff --git a/src/idlib/Lib.cpp b/src/idlib/Lib.cpp index 52ebe1b..368ea46 100644 --- a/src/idlib/Lib.cpp +++ b/src/idlib/Lib.cpp @@ -581,7 +581,7 @@ void AssertFailed( const char *file, int line, const char *expression ) { #ifdef _WIN32 // RAVEN BEGIN // jnewquist: Visual Studio platform independent breakpoint - __debugbreak(); +// __debugbreak(); // RAVEN END #elif defined( __linux__ ) __asm__ __volatile__ ("int $0x03"); diff --git a/src/mpgame/Game_local.cpp b/src/mpgame/Game_local.cpp index 4c0ae7f..0219540 100644 --- a/src/mpgame/Game_local.cpp +++ b/src/mpgame/Game_local.cpp @@ -520,6 +520,7 @@ void idGameLocal::Init( void ) { // RAVEN BEGIN // rjohnson: camera is now contained in a def for frame commands declManager->RegisterDeclType( "camera", DECL_CAMERADEF, idDeclAllocator ); + declManager->RegisterDeclType( "playerModel", DECL_PLAYER_MODEL, idDeclAllocator ); // RAVEN END // register game specific decl folders // RAVEN BEGIN diff --git a/src/renderer/Image.h b/src/renderer/Image.h index bad3d25..f8f76bc 100644 --- a/src/renderer/Image.h +++ b/src/renderer/Image.h @@ -475,7 +475,10 @@ FIXME: make an "imageBlock" type to hold byte*,width,height? byte *R_Dropsample( const byte *in, int inwidth, int inheight, int outwidth, int outheight ); byte *R_ResampleTexture( const byte *in, int inwidth, int inheight, - int outwidth, int outheight ); + int outwidth, int outheight ); + +extern int emptyCubeSize; +void makeEmptyCubeMap( idImage *image ); byte *R_MipMapWithAlphaSpecularity( const byte *in, int width, int height ); byte *R_MipMap( const byte *in, int width, int height, bool preserveBorder ); byte *R_MipMap3D( const byte *in, int width, int height, int depth, bool preserveBorder ); diff --git a/src/renderer/RenderWorld_local.h b/src/renderer/RenderWorld_local.h index 0a0f35e..8acf1d4 100644 --- a/src/renderer/RenderWorld_local.h +++ b/src/renderer/RenderWorld_local.h @@ -162,6 +162,9 @@ public: idStr mapName; // ie: maps/tim_dm2.proc, written to demoFile ID_TIME_T mapTimeStamp; // for fast reloads of the same level + idStr m_filename; // proc/MD5RProc source selected for this world + unsigned int m_CRC; // map file CRC stored in the proc header + unsigned int procFileVersion; // PROC/MD5RProc format version areaNode_t * areaNodes; int numAreaNodes; @@ -232,6 +235,7 @@ public: void AddAreaEntityRefs( int areaNum, const struct portalStack_s *ps ); bool CullLightByPortals( const idRenderLightLocal *light, const struct portalStack_s *ps ); void AddAreaLightRefs( int areaNum, const struct portalStack_s *ps ); + void AddAreaEffectRefs( int areaNum, const struct portalStack_s *ps ); void AddAreaRefs( int areaNum, const struct portalStack_s *ps ); void BuildConnectedAreas_r( int areaNum ); void BuildConnectedAreas( void ); @@ -274,7 +278,13 @@ public: void AddLightRefToArea( idRenderLightLocal *light, portalArea_t *area ); void AddEffectRefToArea( rvRenderEffectLocal *effect, portalArea_t *area ); void FreeEffectDefDerivedData( rvRenderEffectLocal *effect ); - void PushEffectDef( rvRenderEffectLocal *effect ); + void PushEffectDef( int effectHandle ); + void PushPolytopeIntoTree_r( idRenderEntityLocal *def, idRenderLightLocal *light, + rvRenderEffectLocal *effect, const idBox &box, + const idVec3 *points, int numPoints, int nodeNum ); + void PushPolytopeIntoTree( idRenderEntityLocal *def, idRenderLightLocal *light, + rvRenderEffectLocal *effect, const idBox &box, + const idVec3 *points, int numPoints ); void RecurseProcBSP_r( modelTrace_t *results, int parentNodeNum, int nodeNum, float p1f, float p2f, const idVec3 &p1, const idVec3 &p2 ) const; diff --git a/src/renderer/draw_arb2.cpp b/src/renderer/draw_arb2.cpp index 9f38004..169ba87 100644 --- a/src/renderer/draw_arb2.cpp +++ b/src/renderer/draw_arb2.cpp @@ -192,9 +192,11 @@ void RB_ARB2_DrawInteraction( const drawInteraction_t *din ) { qglProgramEnvParameter4fvARB( GL_FRAGMENT_PROGRAM_ARB, 3, din->localViewOrigin.ToFloatPtr() ); } - static const float zeroOne[4] = { 0, 0, 0, 1 }; - static const float oneZero[4] = { 1, 1, 1, 0 }; - static const float negOneOne[4] = { -1, -1, -1, 1 }; + // Quake 4 packs the vertex-color multiplier and addend into x/y. + // interaction.vfp evaluates: color * env[16].x + env[16].y. + static const float zeroOne[4] = { 0, 1, 0, 0 }; + static const float oneZero[4] = { 1, 0, 0, 0 }; + static const float negOneOne[4] = { -1, 1, 0, 0 }; switch ( din->vertexColor ) { case SVC_IGNORE: diff --git a/src/renderer/image_init.cpp b/src/renderer/image_init.cpp index 83e5e1b..ba1a36c 100644 --- a/src/renderer/image_init.cpp +++ b/src/renderer/image_init.cpp @@ -677,6 +677,33 @@ static void makeNormalizeVectorCubeMap( idImage *image ) { Mem_Free(pixels[0]); } +int emptyCubeSize = 128; + +void makeEmptyCubeMap( idImage *image ) { + byte *pixels[6]; + const int size = emptyCubeSize; + pixels[0] = static_cast( Mem_Alloc( size * size * 4 * 6 ) ); + + for ( int face = 0; face < 6; ++face ) { + pixels[face] = pixels[0] + face * size * size * 4; + for ( int y = 0; y < size; ++y ) { + for ( int x = 0; x < size; ++x ) { + float vector[3]; + getCubeVector( face, size, x, y, vector ); + byte *pixel = pixels[face] + 4 * ( y * size + x ); + pixel[0] = static_cast( vector[0] * 127.0f + 128.0f ); + pixel[1] = static_cast( vector[1] * 127.0f + 128.0f ); + pixel[2] = static_cast( vector[2] * 127.0f + 128.0f ); + pixel[3] = 255; + } + } + } + + image->GenerateCubeImage( (const byte **)pixels, size, + TF_LINEAR, false, TD_HIGH_QUALITY ); + Mem_Free( pixels[0] ); +} + diff --git a/src/renderer/image_program.cpp b/src/renderer/image_program.cpp index 32377ce..0599702 100644 --- a/src/renderer/image_program.cpp +++ b/src/renderer/image_program.cpp @@ -56,6 +56,9 @@ Manager ID_TIME_T ProgramImagesTimestamp; bool gWriteProgramFlag; +idCVar r_skipDownsize( "r_skipDownsize", "0", CVAR_RENDERER | CVAR_BOOL, + "skip downsize command in materials", idCmdSystem::ArgCompletion_Boolean ); + /* Anywhere that an image name is used (diffusemaps, bumpmaps, specularmaps, lights, etc), @@ -214,7 +217,6 @@ static void R_AddNormalMaps( byte *data1, int width1, int height1, byte *data2, for ( j = 0 ; j < width1 ; j++ ) { byte *d1, *d2; idVec3 n; - float len; d1 = data1 + ( i * width1 + j ) * 4; d2 = data2 + ( i * width1 + j ) * 4; @@ -225,8 +227,10 @@ static void R_AddNormalMaps( byte *data1, int width1, int height1, byte *data2, // There are some normal maps that blend to 0,0,0 at the edges // this screws up compression, so we try to correct that here by instead fading it to 0,0,1 - len = n.LengthFast(); - if ( len < 1.0f ) { + // Quake 4 tests the exact squared length against 0.96. The Doom 3 + // LengthFast()/1.0 test can accept an encoded normal whose X/Y sum is + // already greater than one, producing a negative square-root input. + if ( n.LengthSqr() < 0.96f ) { n[2] = idMath::Sqrt(1.0 - (n[0]*n[0]) - (n[1]*n[1])); } @@ -234,9 +238,9 @@ static void R_AddNormalMaps( byte *data1, int width1, int height1, byte *data2, n[1] += ( d2[1] - 128 ) / 127.0; n.Normalize(); - d1[0] = (byte)(n[0] * 127 + 128); - d1[1] = (byte)(n[1] * 127 + 128); - d1[2] = (byte)(n[2] * 127 + 128); + d1[0] = (byte)idMath::ClampInt( 0, 255, (int)( n[0] * 127.0f + 128.0f ) ); + d1[1] = (byte)idMath::ClampInt( 0, 255, (int)( n[1] * 127.0f + 128.0f ) ); + d1[2] = (byte)idMath::ClampInt( 0, 255, (int)( n[2] * 127.0f + 128.0f ) ); d1[3] = 255; } } @@ -585,6 +589,36 @@ static bool R_ParseImageProgram_r( idLexer &src, byte **pic, int *width, int *he return true; } + // Raven image programs can explicitly reduce an image before it is uploaded. + // This must be parsed recursively: treating "downsize" as an image name leaves + // the opening parenthesis in the material stream and defaults the whole material. + if ( !token.Icmp( "downsize" ) ) { + MatchAndAppendToken( src, "(" ); + gWriteProgramFlag = true; + + if ( !R_ParseImageProgram_r( src, pic, width, height, timestamps, depth ) ) { + return false; + } + + MatchAndAppendToken( src, "," ); + src.ReadToken( &token ); + AppendToken( token ); + const int shift = token.GetIntValue(); + + if ( pic && !r_skipDownsize.GetBool() ) { + const int newWidth = *width >> shift; + const int newHeight = *height >> shift; + byte *newPic = R_ResampleTexture( *pic, *width, *height, newWidth, newHeight ); + R_StaticFree( *pic ); + *pic = newPic; + *width = newWidth; + *height = newHeight; + } + + MatchAndAppendToken( src, ")" ); + return true; + } + // if we are just parsing instead of loading or checking, // don't do the R_LoadImage if ( !timestamps && !pic ) { diff --git a/src/renderer/material.cpp b/src/renderer/material.cpp index 0d793b4..8a40bfb 100644 --- a/src/renderer/material.cpp +++ b/src/renderer/material.cpp @@ -26,6 +26,23 @@ along with Quake 4 Reconstructed Source Code. If not, see registersAreConstant = false; return EXP_REG_GLOBAL7; } + if ( !token.Icmp( "IsMultiplayer" ) ) { + return GetExpressionConstant( session->IsMultiplayer() ? 1.0f : 0.0f ); + } if ( !token.Icmp( "fragmentPrograms" ) ) { return GetExpressionConstant( (float) glConfig.ARBFragmentProgramAvailable ); } + if ( !token.Icmp( "POTCorrectionX" ) ) { + return GetExpressionConstant( (float)glConfig.vidWidth / (float)MakePowerOfTwo( glConfig.vidWidth ) ); + } + if ( !token.Icmp( "POTCorrectionY" ) ) { + return GetExpressionConstant( (float)glConfig.vidHeight / (float)MakePowerOfTwo( glConfig.vidHeight ) ); + } + if ( !token.Icmp( "VideoWidth" ) ) { + return GetExpressionConstant( (float)glConfig.vidWidth ); + } + if ( !token.Icmp( "VideoHeight" ) ) { + return GetExpressionConstant( (float)glConfig.vidHeight ); + } if ( !token.Icmp( "sound" ) ) { pd->registersAreConstant = false; return EmitOp( 0, 0, OP_TYPE_SOUND ); } + if ( !token.Icmp( "glslPrograms" ) ) { + pd->registersAreConstant = false; + return EmitOp( 0, 0, OP_TYPE_GLSL_ENABLED ); + } + if ( !token.Icmp( "DecalLife" ) ) { + pd->registersAreConstant = false; + return EXP_REG_DECAL_LIFE; + } + if ( !token.Icmp( "DecalSpawn" ) ) { + pd->registersAreConstant = false; + return EXP_REG_DECAL_SPAWN; + } + if ( !token.Icmp( "VertexRandomizer" ) ) { + pd->registersAreConstant = false; + return EXP_REG_VERTEX_RANDOMIZER; + } // parse negative numbers if ( token == "-" ) { @@ -613,6 +687,12 @@ int idMaterial::ParseTerm( idLexer &src ) { return GetExpressionConstant( (float) token.GetFloatValue() ); } + for ( int i = 0; i < (int)( sizeof( materialShaderConstantNames ) / sizeof( materialShaderConstantNames[0] ) ); ++i ) { + if ( !token.Icmp( materialShaderConstantNames[i] ) ) { + return -1 - i; + } + } + // see if it is a table name const idDeclTable *table = static_cast( declManager->FindType( DECL_TABLE, token.c_str(), false ) ); if ( !table ) { @@ -726,6 +806,10 @@ idMaterial::ClearStage */ void idMaterial::ClearStage( shaderStage_t *ss ) { ss->drawStateBits = 0; + ss->mStageRegisterStart = numRegisters; + ss->mNumStageRegisters = 0; + ss->mStageOpsStart = numOps; + ss->mNumStageOps = 0; ss->conditionRegister = GetExpressionConstant( 1 ); ss->color.registers[0] = ss->color.registers[1] = @@ -757,6 +841,10 @@ int idMaterial::NameToSrcBlendMode( const idStr &name ) { return GLS_SRCBLEND_ONE_MINUS_DST_ALPHA; } else if ( !name.Icmp( "GL_SRC_ALPHA_SATURATE" ) ) { return GLS_SRCBLEND_ALPHA_SATURATE; + } else if ( !name.Icmp( "GL_SRC_COLOR" ) ) { + return GLS_SRCBLEND_SRC_COLOR; + } else if ( !name.Icmp( "GL_ONE_MINUS_SRC_COLOR" ) ) { + return GLS_SRCBLEND_ONE_MINUS_SRC_COLOR; } common->Warning( "unknown blend mode '%s' in material '%s'", name.c_str(), GetName() ); @@ -787,6 +875,10 @@ int idMaterial::NameToDstBlendMode( const idStr &name ) { return GLS_DSTBLEND_SRC_COLOR; } else if ( !name.Icmp( "GL_ONE_MINUS_SRC_COLOR" ) ) { return GLS_DSTBLEND_ONE_MINUS_SRC_COLOR; + } else if ( !name.Icmp( "GL_DST_COLOR" ) ) { + return GLS_DSTBLEND_DST_COLOR; + } else if ( !name.Icmp( "GL_ONE_MINUS_DST_COLOR" ) ) { + return GLS_DSTBLEND_ONE_MINUS_DST_COLOR; } common->Warning( "unknown blend mode '%s' in material '%s'", name.c_str(), GetName() ); @@ -903,6 +995,56 @@ void idMaterial::ParseVertexParm( idLexer &src, newShaderStage_t *newStage ) { newStage->vertexParms[parm][3] = ParseExpression( src ); } +/* +================ +idMaterial::ParseFragmentParm + +Quake 4 exposes eight fragment-program parameter vectors in addition to the +vertex parameters inherited from Doom 3. +================ +*/ +void idMaterial::ParseFragmentParm( idLexer &src, newShaderStage_t *newStage ) { + idToken token; + + src.ReadTokenOnLine( &token ); + const int parm = token.GetIntValue(); + if ( !token.IsNumeric() || parm < 0 || parm >= MAX_FRAGMENT_PARMS ) { + common->Warning( "bad fragmentParm number\n" ); + SetMaterialFlag( MF_DEFAULTED ); + return; + } + if ( parm >= newStage->numFragmentParms ) { + newStage->numFragmentParms = parm + 1; + } + + newStage->fragmentParms[parm][0] = ParseExpression( src ); + + src.ReadTokenOnLine( &token ); + if ( !token[0] || token.Icmp( "," ) ) { + newStage->fragmentParms[parm][1] = + newStage->fragmentParms[parm][2] = + newStage->fragmentParms[parm][3] = newStage->fragmentParms[parm][0]; + return; + } + + newStage->fragmentParms[parm][1] = ParseExpression( src ); + src.ReadTokenOnLine( &token ); + if ( !token[0] || token.Icmp( "," ) ) { + newStage->fragmentParms[parm][2] = GetExpressionConstant( 0 ); + newStage->fragmentParms[parm][3] = GetExpressionConstant( 1 ); + return; + } + + newStage->fragmentParms[parm][2] = ParseExpression( src ); + src.ReadTokenOnLine( &token ); + if ( !token[0] || token.Icmp( "," ) ) { + newStage->fragmentParms[parm][3] = GetExpressionConstant( 1 ); + return; + } + + newStage->fragmentParms[parm][3] = ParseExpression( src ); +} + /* ================ @@ -1078,6 +1220,8 @@ bool idMaterial::ParseStage( idLexer &src, const textureRepeat_t trpDefault ) { int a, b; int matrix[2][3]; newShaderStage_t newStage; + rvNewShaderStage *newShaderStage = NULL; + bool skipWarning = false; if ( numStages >= MAX_SHADER_STAGES ) { SetMaterialFlag( MF_DEFAULTED ); @@ -1146,11 +1290,51 @@ bool idMaterial::ParseStage( idLexer &src, const textureRepeat_t trpDefault ) { continue; } + if ( !token.Icmp( "reflectionRenderMap" ) ) { + ts->dynamic = DI_REFLECTION_RENDER; + ts->width = src.ParseInt(); + ts->height = src.ParseInt(); + continue; + } + + if ( !token.Icmp( "refractionRenderMap" ) ) { + ts->dynamic = DI_REFRACTION_RENDER; + ts->width = src.ParseInt(); + ts->height = src.ParseInt(); + ts->texgen = TG_SCREEN; + continue; + } + + if ( !token.Icmp( "cubeRenderMap" ) ) { + ts->dynamic = DI_CUBE_RENDER; + ts->width = ts->height = src.ParseInt(); + ts->texgen = TG_REFLECT_CUBE; + emptyCubeSize = ts->width; + ts->image = globalImages->ImageFromFunction( "_emptyCubeMap", makeEmptyCubeMap ); + continue; + } + if ( !token.Icmp( "screen" ) ) { ts->texgen = TG_SCREEN; continue; } + if ( !token.Icmp( "screen2" ) ) { + ts->texgen = TG_SCREEN2; + continue; + } + + if ( !token.Icmp( "glassWarp" ) ) { + ts->texgen = TG_GLASSWARP; + continue; + } + + // The retail loader only uses this as a build-time image flag. It is + // still a valid runtime stage option and must not default the material. + if ( !token.Icmp( "nomips" ) ) { + continue; + } + if ( !token.Icmp( "videomap" ) ) { // note that videomaps will always be in clamp mode, so texture // coordinates had better be in the 0 to 1 range @@ -1223,6 +1407,10 @@ bool idMaterial::ParseStage( idLexer &src, const textureRepeat_t trpDefault ) { trp = TR_CLAMP_TO_ZERO_ALPHA; continue; } + if ( !token.Icmp( "mirroredrepeat" ) ) { + trp = TR_MIRRORED_REPEAT; + continue; + } if ( !token.Icmp( "uncompressed" ) || !token.Icmp( "highquality" ) ) { if ( !globalImages->image_ignoreHighQuality.GetInteger() ) { td = TD_HIGH_QUALITY; @@ -1272,6 +1460,8 @@ bool idMaterial::ParseStage( idLexer &src, const textureRepeat_t trpDefault ) { texGenRegisters[0] = ParseExpression( src ); texGenRegisters[1] = ParseExpression( src ); texGenRegisters[2] = ParseExpression( src ); + } else if ( !token.Icmp( "potCorrection" ) ) { + ts->texgen = TG_POT_CORRECTION; } else { common->Warning( "bad texGen '%s' in material %s", token.c_str(), GetName() ); SetMaterialFlag( MF_DEFAULTED ); @@ -1406,8 +1596,28 @@ bool idMaterial::ParseStage( idLexer &src, const textureRepeat_t trpDefault ) { ss->hasAlphaTest = true; ss->alphaTestRegister = ParseExpression( src ); coverage = MC_PERFORATED; + if ( !ss->hasAlphaFunc ) { + ss->alphaTestMode = GL_GREATER; + } continue; - } + } + if ( !token.Icmp( "alphaFunc" ) ) { + ss->hasAlphaFunc = true; + ss->hasAlphaTest = true; + ss->alphaTestMode = GL_GREATER; + if ( src.ReadToken( &token ) ) { + if ( !token.Icmp( "less" ) ) { + ss->alphaTestMode = GL_LESS; + } else if ( !token.Icmp( "equal" ) ) { + ss->alphaTestMode = GL_EQUAL; + } else if ( !token.Icmp( "greater" ) ) { + ss->alphaTestMode = GL_GREATER; + } else { + common->Warning( "unknown alpha func '%s' in material '%s'", token.c_str(), GetName() ); + } + } + continue; + } // shorthand for 2D modulated if ( !token.Icmp( "colored" ) ) { @@ -1464,9 +1674,49 @@ bool idMaterial::ParseStage( idLexer &src, const textureRepeat_t trpDefault ) { if ( src.ReadTokenOnLine( &token ) ) { newStage.vertexProgram = R_FindARBProgram( GL_VERTEX_PROGRAM_ARB, token.c_str() ); newStage.fragmentProgram = R_FindARBProgram( GL_FRAGMENT_PROGRAM_ARB, token.c_str() ); + if ( !newStage.fragmentProgram ) { + newStage.vertexProgram = 0; + skipWarning = true; + } +#if defined( _MD5R_SUPPORT ) || defined( Q4SDK_MD5R ) + idStr md5rProgram = "md5r"; + md5rProgram += token.c_str(); + newStage.md5rVertexProgram = R_FindARBProgram( GL_VERTEX_PROGRAM_ARB, md5rProgram.c_str() ); +#endif } continue; } + if ( !token.Icmp( "glslProgram" ) ) { + if ( newShaderStage != NULL ) { + common->Warning( "ParseStage - glslProgram: Shader program already set!" ); + SetMaterialFlag( MF_DEFAULTED ); + delete newShaderStage; + return false; + } + newShaderStage = new rvGLSLShaderStage(); + if ( !newShaderStage->ParseProgram( src, this ) ) { + skipWarning = true; + } + continue; + } + if ( !token.Icmp( "shaderParm" ) ) { + if ( newShaderStage == NULL ) { + common->Warning( "ParseStage: shaderParm set before shader type declared." ); + SetMaterialFlag( MF_DEFAULTED ); + return false; + } + newShaderStage->ParseShaderParm( src, this ); + continue; + } + if ( !token.Icmp( "shaderTexture" ) ) { + if ( newShaderStage == NULL ) { + common->Warning( "ParseStage: shaderTexture set before shader type declared." ); + SetMaterialFlag( MF_DEFAULTED ); + return false; + } + newShaderStage->ParseTextureParm( src, this, trpDefault ); + continue; + } if ( !token.Icmp( "fragmentProgram" ) ) { if ( src.ReadTokenOnLine( &token ) ) { newStage.fragmentProgram = R_FindARBProgram( GL_FRAGMENT_PROGRAM_ARB, token.c_str() ); @@ -1476,6 +1726,11 @@ bool idMaterial::ParseStage( idLexer &src, const textureRepeat_t trpDefault ) { if ( !token.Icmp( "vertexProgram" ) ) { if ( src.ReadTokenOnLine( &token ) ) { newStage.vertexProgram = R_FindARBProgram( GL_VERTEX_PROGRAM_ARB, token.c_str() ); +#if defined( _MD5R_SUPPORT ) || defined( Q4SDK_MD5R ) + idStr md5rProgram = "md5r"; + md5rProgram += token.c_str(); + newStage.md5rVertexProgram = R_FindARBProgram( GL_VERTEX_PROGRAM_ARB, md5rProgram.c_str() ); +#endif } continue; } @@ -1498,6 +1753,10 @@ bool idMaterial::ParseStage( idLexer &src, const textureRepeat_t trpDefault ) { ParseVertexParm( src, &newStage ); continue; } + if ( !token.Icmp( "fragmentParm" ) ) { + ParseFragmentParm( src, &newStage ); + continue; + } if ( !token.Icmp( "fragmentMap" ) ) { ParseFragmentMap( src, &newStage ); @@ -1507,15 +1766,19 @@ bool idMaterial::ParseStage( idLexer &src, const textureRepeat_t trpDefault ) { common->Warning( "unknown token '%s' in material '%s'", token.c_str(), GetName() ); SetMaterialFlag( MF_DEFAULTED ); + delete newShaderStage; return false; } // if we are using newStage, allocate a copy of it + ss->mNumStageRegisters = numRegisters - ss->mStageRegisterStart; + ss->mNumStageOps = numOps - ss->mStageOpsStart; if ( newStage.fragmentProgram || newStage.vertexProgram ) { ss->newStage = (newShaderStage_t *)Mem_Alloc( sizeof( newStage ) ); *(ss->newStage) = newStage; } + ss->newShaderStage = newShaderStage; // successfully parsed a stage numStages++; @@ -1543,7 +1806,7 @@ bool idMaterial::ParseStage( idLexer &src, const textureRepeat_t trpDefault ) { if ( !ts->image ) { ts->image = globalImages->defaultImage; } - } else if ( !ts->cinematic && !ts->dynamic && !ss->newStage ) { + } else if ( !skipWarning && !ts->cinematic && !ts->dynamic && !ss->newStage && !ss->newShaderStage ) { common->Warning( "material '%s' had stage with no image", GetName() ); ts->image = globalImages->defaultImage; } @@ -1783,6 +2046,39 @@ bool idMaterial::ParseMaterial( idLexer &src ) { desc = token.c_str(); continue; } + // default material type used by collision traces and impact effects + else if ( !token.Icmp( "materialType" ) ) { + src.ReadTokenOnLine( &token ); + materialType = static_cast( + declManager->FindType( DECL_MATERIALTYPE, token.c_str(), true ) ); + continue; + } + // per-texel material type lookup image + else if ( !token.Icmp( "materialImage" ) ) { + src.ReadTokenOnLine( &token ); + materialTypeArray = MT_GetMaterialTypeArray( token.c_str(), MTAWidth, MTAHeight ); + materialTypeArrayName = token.c_str(); + continue; + } + else if ( !token.Icmp( "sky" ) ) { + SetMaterialFlag( MF_SKY ); + continue; + } + else if ( !token.Icmp( "portalDistanceNear" ) ) { + portalDistanceNear = src.ParseFloat(); + continue; + } + else if ( !token.Icmp( "portalDistanceFar" ) ) { + portalDistanceFar = src.ParseFloat(); + continue; + } + else if ( !token.Icmp( "portalImage" ) ) { + src.ReadTokenOnLine( &token ); + portalImage = globalImages->ImageFromFile( token.c_str(), TF_DEFAULT, true, + TR_CLAMP, TD_DEFAULT, CF_2D ); + src.SkipRestOfLine(); + continue; + } // check for the surface / content bit flags else if ( CheckSurfaceParm( &token ) ) { continue; @@ -1805,6 +2101,10 @@ bool idMaterial::ParseMaterial( idLexer &src ) { SetMaterialFlag( MF_NOSHADOWS ); continue; } + else if ( !token.Icmp( "needCurrentRender" ) ) { + SetMaterialFlag( MF_NEED_CURRENT_RENDER ); + continue; + } else if ( !token.Icmp( "suppressInSubview" ) ) { suppressInSubview = true; continue; @@ -2235,6 +2535,10 @@ bool idMaterial::Parse( const char *text, const int textLength, bool noCaching ) } } + if ( ( portalDistanceNear < 262144.0f || portalDistanceFar < 262144.0f ) && !portalImage ) { + portalImage = globalImages->blackImage; + } + // add a tiny offset to the sort orders, so that different materials // that have the same sort value will at least sort consistantly, instead // of flickering back and forth @@ -2456,6 +2760,9 @@ void idMaterial::EvaluateRegisters( float *registers, const float shaderParms[MA } } break; + case OP_TYPE_GLSL_ENABLED: + registers[op->c] = glConfig.GLSLProgramAvailable ? 1.0f : 0.0f; + break; case OP_TYPE_GT: registers[op->c] = registers[ op->a ] > registers[op->b]; break; diff --git a/src/renderer/model.cpp b/src/renderer/model.cpp index 40f5776..bd23f93 100644 --- a/src/renderer/model.cpp +++ b/src/renderer/model.cpp @@ -1193,7 +1193,7 @@ bool idRenderModelStatic::ConvertLWOToModelSurfaces( const struct st_lwObject *l } if ( numTVertexes ) { - tvList = (idVec2 *)Mem_Alloc( numTVertexes * sizeof( tvList[0] ) ); + tvList = (idVec2 *)R_StaticAlloc( numTVertexes * sizeof( tvList[0] ) ); int offset = 0; for( lwVMap *vm = layer->vmap; vm; vm = vm->next ) { if ( vm->type == LWID_('T','X','U','V') ) { @@ -1208,7 +1208,7 @@ bool idRenderModelStatic::ConvertLWOToModelSurfaces( const struct st_lwObject *l } else { common->Warning( "ConvertLWOToModelSurfaces: model \'%s\' has bad or missing uv data", name.c_str() ); numTVertexes = 1; - tvList = (idVec2 *)Mem_ClearedAlloc( numTVertexes * sizeof( tvList[0] ) ); + tvList = (idVec2 *)R_ClearedStaticAlloc( numTVertexes * sizeof( tvList[0] ) ); } // It seems like the tools our artists are using often generate diff --git a/src/renderer/renderworld.cpp b/src/renderer/renderworld.cpp index 783302e..7cf5f6c 100644 --- a/src/renderer/renderworld.cpp +++ b/src/renderer/renderworld.cpp @@ -123,6 +123,9 @@ idRenderWorldLocal::idRenderWorldLocal idRenderWorldLocal::idRenderWorldLocal() { mapName.Clear(); mapTimeStamp = FILE_NOT_FOUND_TIMESTAMP; + m_filename.Clear(); + m_CRC = 0; + procFileVersion = 0; generateAllInteractionsCalled = false; @@ -541,7 +544,9 @@ void idRenderWorldLocal::FreeEffectDefDerivedData( rvRenderEffectLocal *def ) { } def->effectRefs = NULL; def->viewEffect = NULL; + delete def->dynamicModel; def->dynamicModel = NULL; + def->dynamicModelFrameCount = 0; } /* @@ -569,24 +574,109 @@ void idRenderWorldLocal::AddEffectRefToArea( rvRenderEffectLocal *def, portalAre /* ================== -PushEffectDef +PushPolytopeIntoTree_r -Place the effect in every portal area touched by its transformed current -bounds. Retail performs the same placement through the proc BSP. +Places an oriented polytope in each portal area it touches. Quake 4 uses +this path for effects because their accumulated bounds may be much larger +than the axis-aligned bounds accepted by BoundsInAreas. ================== */ -void idRenderWorldLocal::PushEffectDef( rvRenderEffectLocal *def ) { - if ( def == NULL || def->referenceBounds.IsCleared() || areaNodes == NULL ) { +void idRenderWorldLocal::PushPolytopeIntoTree_r( idRenderEntityLocal *def, + idRenderLightLocal *light, rvRenderEffectLocal *effect, + const idBox &box, const idVec3 *points, int numPoints, int nodeNum ) { + if ( nodeNum < 0 ) { + portalArea_t *area = &portalAreas[-1 - nodeNum]; + if ( area->viewCount == tr.viewCount ) { + return; + } + area->viewCount = tr.viewCount; + if ( def != NULL ) { + AddEntityRefToArea( def, area ); + } + if ( light != NULL ) { + AddLightRefToArea( light, area ); + } + if ( effect != NULL ) { + AddEffectRefToArea( effect, area ); + } return; } - idBounds worldBounds; - worldBounds.FromTransformedBounds( def->referenceBounds, def->parms.origin, def->parms.axis ); - int areas[128]; - const int numAreas = BoundsInAreas( worldBounds, areas, sizeof( areas ) / sizeof( areas[0] ) ); - for ( int i = 0; i < numAreas; ++i ) { - AddEffectRefToArea( def, &portalAreas[areas[i]] ); + areaNode_t *node = &areaNodes[nodeNum]; + if ( r_useNodeCommonChildren.GetBool() && + node->commonChildrenArea != CHILDREN_HAVE_MULTIPLE_AREAS && + portalAreas[node->commonChildrenArea].viewCount == tr.viewCount ) { + return; } + + int side = box.PlaneSide( node->plane, 0.0f ); + bool front = side != PLANESIDE_BACK; + bool back = side != PLANESIDE_FRONT; + + // The oriented box is deliberately conservative. When actual points + // are supplied, retail tightens a crossing result with exact tests. + if ( side == PLANESIDE_CROSS && points != NULL && numPoints > 0 ) { + front = false; + back = false; + for ( int i = 0; i < numPoints; ++i ) { + const float distance = node->plane.Distance( points[i] ); + if ( distance > 0.0f ) { + front = true; + } else if ( distance < 0.0f ) { + back = true; + } + if ( front && back ) { + break; + } + } + } + + if ( front && node->children[0] != 0 ) { + PushPolytopeIntoTree_r( def, light, effect, box, points, numPoints, node->children[0] ); + } + if ( back && node->children[1] != 0 ) { + PushPolytopeIntoTree_r( def, light, effect, box, points, numPoints, node->children[1] ); + } +} + +/* +================== +PushPolytopeIntoTree +================== +*/ +void idRenderWorldLocal::PushPolytopeIntoTree( idRenderEntityLocal *def, + idRenderLightLocal *light, rvRenderEffectLocal *effect, + const idBox &box, const idVec3 *points, int numPoints ) { + if ( areaNodes != NULL ) { + PushPolytopeIntoTree_r( def, light, effect, box, points, numPoints, 0 ); + } +} + +/* +================== +PushEffectDef +================== +*/ +void idRenderWorldLocal::PushEffectDef( int effectHandle ) { + if ( effectHandle < 0 || effectHandle >= effectDefs.Num() ) { + common->Printf( "idRenderWorld::PushEffectDef: invalid handle %i >= %i\n", + effectHandle, effectDefs.Num() ); + return; + } + + rvRenderEffectLocal *def = effectDefs[effectHandle]; + if ( def == NULL ) { + common->Printf( "idRenderWorld::PushEffectDef: handle %i [0, %i] is NULL\n", + effectHandle, effectDefs.Num() ); + return; + } + + R_AxisToModelMatrix( def->parms.axis, def->parms.origin, def->modelMatrix ); + def->lastModifiedFrameNum = tr.frameCount; + ++tr.viewCount; + + const idBox box( def->referenceBounds, def->parms.origin, def->parms.axis ); + PushPolytopeIntoTree( NULL, NULL, def, box, NULL, 0 ); } /* @@ -637,7 +727,7 @@ bool idRenderWorldLocal::UpdateEffectDef( qhandle_t effectHandle, const renderEf return true; } if ( push ) { - PushEffectDef( def ); + PushEffectDef( effectHandle ); } return false; } @@ -681,7 +771,7 @@ void idRenderWorldLocal::PushMarkedDefs() { for ( int i = 0; i < markedEffectDefs.Num(); ++i ) { const int handle = markedEffectDefs[i]; if ( handle >= 0 && handle < effectDefs.Num() && effectDefs[handle] != NULL ) { - PushEffectDef( effectDefs[handle] ); + PushEffectDef( handle ); } } ClearMarkedDefs(); diff --git a/src/renderer/renderworld_load.cpp b/src/renderer/renderworld_load.cpp index a87fe4d..2e0d794 100644 --- a/src/renderer/renderworld_load.cpp +++ b/src/renderer/renderworld_load.cpp @@ -130,10 +130,17 @@ idRenderModel *idRenderWorldLocal::ParseModel( idLexer *src ) { model->InitEmpty( token ); int numSurfaces = src->ParseInt(); + common->Printf( "Q4 proc trace: model %s surfaces=%d version=%u\n", token.c_str(), numSurfaces, procFileVersion ); if ( numSurfaces < 0 ) { src->Error( "R_ParseModel: bad numSurfaces" ); } + // PROC v2+ stores a per-area portal-sky flag after the surface count. + // Only static world models (_areaN) carry this field. + if ( procFileVersion > 1 && model->IsStaticWorldModel() ) { + model->SetHasSky( src->ParseBool() ); + } + for ( i = 0 ; i < numSurfaces ; i++ ) { src->ExpectTokenString( "{" ); @@ -151,9 +158,12 @@ idRenderModel *idRenderWorldLocal::ParseModel( idLexer *src ) { R_AllocStaticTriSurfVerts( tri, tri->numVerts ); for ( j = 0 ; j < tri->numVerts ; j++ ) { - float vec[8]; + float vec[12]; - src->Parse1DMatrix( 8, vec ); + const int valuesRead = src->Parse1DMatrixOpenEnded( 12, vec ); + if ( valuesRead != 8 && valuesRead != 12 ) { + src->Error( "R_ParseModel: bad vertex read" ); + } tri->verts[j].xyz[0] = vec[0]; tri->verts[j].xyz[1] = vec[1]; @@ -163,6 +173,14 @@ idRenderModel *idRenderWorldLocal::ParseModel( idLexer *src ) { tri->verts[j].normal[0] = vec[5]; tri->verts[j].normal[1] = vec[6]; tri->verts[j].normal[2] = vec[7]; + if ( valuesRead == 12 ) { + tri->verts[j].color[0] = static_cast( vec[8] ); + tri->verts[j].color[1] = static_cast( vec[9] ); + tri->verts[j].color[2] = static_cast( vec[10] ); + tri->verts[j].color[3] = static_cast( vec[11] ); + } else { + *reinterpret_cast( tri->verts[j].color ) = 0xFF000000u; + } } R_AllocStaticTriSurfIndexes( tri, tri->numIndexes ); @@ -178,6 +196,7 @@ idRenderModel *idRenderWorldLocal::ParseModel( idLexer *src ) { src->ExpectTokenString( "}" ); model->FinishSurfaces(); + common->Printf( "Q4 proc trace: finished model %s\n", model->Name() ); return model; } @@ -201,6 +220,7 @@ idRenderModel *idRenderWorldLocal::ParseShadowModel( idLexer *src ) { model = renderModelManager->AllocModel(); model->InitEmpty( token ); + common->Printf( "Q4 proc trace: shadow model %s\n", token.c_str() ); surf.shader = tr.defaultMaterial; @@ -239,6 +259,7 @@ idRenderModel *idRenderWorldLocal::ParseShadowModel( idLexer *src ) { // we do NOT do a model->FinishSurfaceces, because we don't need sil edges, planes, tangents, etc. // model->FinishSurfaces(); + common->Printf( "Q4 proc trace: finished shadow model %s\n", model->Name() ); return model; } @@ -537,6 +558,7 @@ bool idRenderWorldLocal::InitFromMap( const char *name ) { mapName = name; mapTimeStamp = currentTimeStamp; + m_filename = filename; // if we are writing a demo, archive the load command if ( session->writeDemo ) { @@ -549,6 +571,21 @@ bool idRenderWorldLocal::InitFromMap( const char *name ) { return false; } + // Quake 4 PROC files carry a quoted format version followed by the source + // map CRC before any of the Doom 3-style top-level blocks. + if ( !src->ReadToken( &token ) ) { + common->Warning( "%s is missing version", filename.c_str() ); + delete src; + return false; + } + procFileVersion = static_cast( atol( token.c_str() ) ); + if ( !src->ExpectTokenType( TT_NUMBER, TT_INTEGER, &token ) ) { + common->Warning( "%s has no map file CRC", filename.c_str() ); + delete src; + return false; + } + m_CRC = static_cast( token.GetIntValue() ); + // parse the file while ( 1 ) { if ( !src->ReadToken( &token ) ) { @@ -662,17 +699,6 @@ void idRenderWorldLocal::AddWorldModelEntities() { common->Error( "idRenderWorldLocal::InitFromMap: bad area model lookup" ); } - idRenderModel *hModel = def->parms.hModel; - - for ( int j = 0; j < hModel->NumSurfaces(); j++ ) { - const modelSurface_t *surf = hModel->Surface( j ); - - if ( surf->shader->GetName() == idStr( "textures/smf/portal_sky" ) ) { - def->needsPortalSky = true; - portalAreas[i].hasSkybox = true; - } - } - def->referenceBounds = def->parms.hModel->Bounds(); def->parms.axis[0][0] = 1; @@ -688,6 +714,8 @@ void idRenderWorldLocal::AddWorldModelEntities() { def->parms.shaderParms[2] = def->parms.shaderParms[3] = 1; + portalAreas[i].hasSkybox = def->parms.hModel->GetHasSky(); + AddEntityRefToArea( def, &portalAreas[i] ); } } diff --git a/src/renderer/renderworld_portals.cpp b/src/renderer/renderworld_portals.cpp index 24de7ba..26cdf54 100644 --- a/src/renderer/renderworld_portals.cpp +++ b/src/renderer/renderworld_portals.cpp @@ -754,6 +754,46 @@ void idRenderWorldLocal::AddAreaLightRefs( int areaNum, const portalStack_t *ps } } +/* +=================== +AddAreaEffectRefs + +This is the point where BSE effect definitions visible through a portal chain +are added to the current view. +=================== +*/ +void idRenderWorldLocal::AddAreaEffectRefs( int areaNum, const portalStack_t *ps ) { + portalArea_t *area = &portalAreas[areaNum]; + + for ( areaReference_t *ref = area->effectRefs.areaNext; + ref != &area->effectRefs; ref = ref->areaNext ) { + rvRenderEffectLocal *effect = ref->effect; + if ( effect == NULL ) { + continue; + } + + if ( !r_skipSuppress.GetBool() ) { + if ( effect->parms.suppressSurfaceInViewID != 0 && + effect->parms.suppressSurfaceInViewID == tr.viewDef->renderView.viewID ) { + continue; + } + if ( effect->parms.allowSurfaceInViewID != 0 && + effect->parms.allowSurfaceInViewID != tr.viewDef->renderView.viewID ) { + continue; + } + } + + if ( r_useEntityCulling.GetBool() && + R_CullLocalBox( effect->referenceBounds, effect->modelMatrix, + ps->numPortalPlanes, ps->portalPlanes ) ) { + continue; + } + + viewEffect_t *viewEffect = R_SetEffectDefViewEntity( effect ); + viewEffect->scissorRect.Union( ps->rect ); + } +} + /* =================== AddAreaRefs @@ -770,6 +810,7 @@ void idRenderWorldLocal::AddAreaRefs( int areaNum, const portalStack_t *ps ) { // add the models and lights, using more precise culling to the planes AddAreaEntityRefs( areaNum, ps ); AddAreaLightRefs( areaNum, ps ); + AddAreaEffectRefs( areaNum, ps ); } /* @@ -837,6 +878,7 @@ void idRenderWorldLocal::FindViewLightsAndEntities( void ) { // clear the visible lightDef and entityDef lists tr.viewDef->viewLights = NULL; tr.viewDef->viewEntitys = NULL; + tr.viewDef->viewEffects = NULL; // find the area to start the portal flooding in if ( !r_usePortals.GetBool() ) { diff --git a/src/renderer/tr_backend.cpp b/src/renderer/tr_backend.cpp index 35d316a..ba12e9c 100644 --- a/src/renderer/tr_backend.cpp +++ b/src/renderer/tr_backend.cpp @@ -396,6 +396,12 @@ void GL_State( int stateBits ) { case GLS_DSTBLEND_ONE_MINUS_DST_ALPHA: dstFactor = GL_ONE_MINUS_DST_ALPHA; break; + case GLS_DSTBLEND_DST_COLOR: + dstFactor = GL_DST_COLOR; + break; + case GLS_DSTBLEND_ONE_MINUS_DST_COLOR: + dstFactor = GL_ONE_MINUS_DST_COLOR; + break; default: dstFactor = GL_ONE; // to get warning to shut up common->Error( "GL_State: invalid dst blend state bits\n" ); diff --git a/src/renderer/tr_light.cpp b/src/renderer/tr_light.cpp index 3dbad97..9e6fe34 100644 --- a/src/renderer/tr_light.cpp +++ b/src/renderer/tr_light.cpp @@ -26,6 +26,7 @@ along with Quake 4 Reconstructed Source Code. If not, see viewCount == tr.viewCount ) { + return def->viewEffect; + } + def->viewCount = tr.viewCount; + + viewEffect_t *viewEffect = static_cast( R_ClearedFrameAlloc( sizeof( *viewEffect ) ) ); + viewEffect->effectDef = def; + viewEffect->scissorRect.Clear(); + viewEffect->modelDepthHack = def->parms.modelDepthHack; + viewEffect->weaponDepthHackInViewID = def->parms.weaponDepthHackInViewID; + + R_AxisToModelMatrix( def->parms.axis, def->parms.origin, viewEffect->modelMatrix ); + if ( tr.viewDef != NULL ) { + myGlMultMatrix( viewEffect->modelMatrix, tr.viewDef->worldSpace.modelViewMatrix, + viewEffect->modelViewMatrix ); + viewEffect->distanceToCamera = ( def->parms.origin - tr.viewDef->renderView.vieworg ).LengthSqr(); + viewEffect->next = tr.viewDef->viewEffects; + tr.viewDef->viewEffects = viewEffect; + } + + def->viewEffect = viewEffect; + return viewEffect; +} + +static int R_CompareViewEffects( const void *left, const void *right ) { + const viewEffect_t *a = *static_cast( left ); + const viewEffect_t *b = *static_cast( right ); + if ( a->distanceToCamera < b->distanceToCamera ) { + return 1; + } + if ( a->distanceToCamera > b->distanceToCamera ) { + return -1; + } + return 0; +} + +static int R_SortViewEffects( viewEffect_t ***array ) { + int count = 0; + for ( viewEffect_t *effect = tr.viewDef->viewEffects; effect != NULL; effect = effect->next ) { + ++count; + } + if ( count == 0 ) { + *array = NULL; + return 0; + } + + *array = static_cast( R_FrameAlloc( count * sizeof( (*array)[0] ) ) ); + int index = 0; + for ( viewEffect_t *effect = tr.viewDef->viewEffects; effect != NULL; effect = effect->next ) { + (*array)[index++] = effect; + } + qsort( *array, count, sizeof( (*array)[0] ), R_CompareViewEffects ); + return count; +} + /* ==================== R_TestPointInViewLight @@ -1174,6 +1239,46 @@ idRenderModel *R_EntityDefDynamicModel( idRenderEntityLocal *def ) { return def->dynamicModel; } +/* +=================== +R_EffectDefDynamicModel + +Build the transient render model emitted by a serviced BSE effect. Retail +rebuilds continuous effect geometry once per render frame. +=================== +*/ +static idRenderModel *R_EffectDefDynamicModel( rvRenderEffectLocal *def ) { + if ( tr.viewDef == NULL || def == NULL || def->effect == NULL || bse == NULL ) { + return NULL; + } + + const char *effectName = def->parms.declEffect ? def->parms.declEffect->GetName() : ""; + if ( bse->Filtered( effectName, EC_IGNORE ) ) { + return NULL; + } + + if ( def->dynamicModelFrameCount != tr.frameCount ) { + delete def->dynamicModel; + def->dynamicModel = def->effect->Render( &def->parms, tr.viewDef ); + def->dynamicModelFrameCount = tr.frameCount; + } + + if ( def->dynamicModel != NULL ) { + const float depthHack = def->dynamicModel->DepthHack(); + if ( depthHack != 0.0f ) { + idPlane eye; + idPlane clip; + idVec3 ndc; + R_TransformModelToClip( def->parms.origin, tr.viewDef->worldSpace.modelViewMatrix, + tr.viewDef->projectionMatrix, eye, clip ); + R_TransformClipToDevice( clip, tr.viewDef, ndc ); + def->parms.modelDepthHack = depthHack * ( 1.0f - ndc.z ); + } + } + + return def->dynamicModel; +} + /* ================= R_AddDrawSurf @@ -1296,6 +1401,57 @@ void R_AddDrawSurf( const srfTriangles_t *tri, const viewEntity_t *space, const // adds for this view } +/* +================= +R_AddDrawSurf + +BSE overload. Effect geometry uses renderEffect shader parameters and the +viewEffect matrix prefix while sharing the normal draw-surface back end. +================= +*/ +void R_AddDrawSurf( const srfTriangles_t *tri, const viewEffect_t *space, const renderEffect_t *renderEffect, + const idMaterial *shader, const idScreenRect &scissor, unsigned int flags ) { + drawSurf_t *drawSurf = static_cast( R_ClearedFrameAlloc( sizeof( *drawSurf ) ) ); + drawSurf->geo = tri; + drawSurf->space = reinterpret_cast( space ); + drawSurf->material = shader; + drawSurf->scissorRect = scissor; + drawSurf->sort = shader->GetSort() + tr.sortOffset; + drawSurf->mFlags = flags; + + tr.sortOffset += 0.000001f; + + if ( tr.viewDef->numDrawSurfs == tr.viewDef->maxDrawSurfs ) { + drawSurf_t **old = tr.viewDef->drawSurfs; + int copyBytes; + if ( tr.viewDef->maxDrawSurfs == 0 ) { + tr.viewDef->maxDrawSurfs = INITIAL_DRAWSURFS; + copyBytes = 0; + } else { + copyBytes = tr.viewDef->maxDrawSurfs * sizeof( tr.viewDef->drawSurfs[0] ); + tr.viewDef->maxDrawSurfs *= 2; + } + tr.viewDef->drawSurfs = static_cast( + R_FrameAlloc( tr.viewDef->maxDrawSurfs * sizeof( tr.viewDef->drawSurfs[0] ) ) ); + if ( copyBytes > 0 ) { + memcpy( tr.viewDef->drawSurfs, old, copyBytes ); + } + } + tr.viewDef->drawSurfs[tr.viewDef->numDrawSurfs++] = drawSurf; + + const float *constantRegisters = shader->ConstantRegisters(); + if ( constantRegisters != NULL ) { + drawSurf->shaderRegisters = constantRegisters; + } else { + float *registers = static_cast( + R_FrameAlloc( shader->GetNumRegisters() * sizeof( registers[0] ) ) ); + drawSurf->shaderRegisters = registers; + shader->EvaluateRegisters( registers, renderEffect->shaderParms, tr.viewDef, 0 ); + } + + R_DeformDrawSurf( drawSurf ); +} + /* =============== R_AddAmbientDrawsurfs @@ -1405,6 +1561,57 @@ static void R_AddAmbientDrawsurfs( viewEntity_t *vEntity ) { } } +/* +=============== +R_AddAmbientEffectDrawsurfs + +Submit every visible surface generated by a BSE effect model. +=============== +*/ +static void R_AddAmbientEffectDrawsurfs( viewEffect_t *viewEffect ) { + rvRenderEffectLocal *def = viewEffect->effectDef; + idRenderModel *model = def->dynamicModel; + if ( model == NULL ) { + return; + } + + const int total = model->NumSurfaces(); + for ( int i = 0; i < total; ++i ) { + const modelSurface_t *surface = model->Surface( i ); + if ( surface == NULL || surface->geometry == NULL || surface->geometry->numIndexes == 0 ) { + continue; + } + + srfTriangles_t *triangles = surface->geometry; + const idMaterial *shader = surface->shader; + if ( shader == NULL || !shader->IsDrawn() ) { + continue; + } + if ( R_CullLocalBox( triangles->bounds, viewEffect->modelMatrix, 5, tr.viewDef->frustum ) ) { + continue; + } + + def->visibleCount = tr.viewCount; + if ( triangles->primBatchMesh == NULL ) { + if ( !R_CreateAmbientCache( triangles, false ) ) { + return; + } + vertexCache.Touch( triangles->ambientCache ); + + if ( r_useIndexBuffers.GetBool() && triangles->indexCache == NULL ) { + vertexCache.Alloc( triangles->indexes, + triangles->numIndexes * sizeof( triangles->indexes[0] ), &triangles->indexCache, true ); + } + if ( triangles->indexCache != NULL ) { + vertexCache.Touch( triangles->indexCache ); + } + } + + R_AddDrawSurf( triangles, viewEffect, &def->parms, shader, viewEffect->scissorRect ); + triangles->ambientViewCount = tr.viewCount; + } +} + /* ================== R_CalcEntityScissorRectangle @@ -1483,6 +1690,30 @@ void R_AddModelSurfaces( void ) { } } +/* +=================== +R_AddEffectSurfaces + +Effects are rendered back-to-front, matching the retail view-effect sort. +=================== +*/ +void R_AddEffectSurfaces( void ) { + viewEffect_t **effects = NULL; + const int count = R_SortViewEffects( &effects ); + for ( int i = 0; i < count; ++i ) { + viewEffect_t *viewEffect = effects[i]; + if ( viewEffect->scissorRect.IsEmpty() ) { + continue; + } + + idRenderModel *model = R_EffectDefDynamicModel( viewEffect->effectDef ); + if ( model == NULL || model->NumSurfaces() <= 0 ) { + continue; + } + R_AddAmbientEffectDrawsurfs( viewEffect ); + } +} + /* ===================== R_RemoveUnecessaryViewLights diff --git a/src/renderer/tr_local.h b/src/renderer/tr_local.h index 734363b..d4a6bd1 100644 --- a/src/renderer/tr_local.h +++ b/src/renderer/tr_local.h @@ -405,6 +405,21 @@ typedef struct viewEntity_s { } viewEntity_t; +// A BSE effect uses the same matrix prefix as a viewEntity so its generated +// surfaces can travel through the existing draw-surface back end. The retail +// PDB records this structure as 164 bytes in the 32-bit build. +typedef struct viewEffect_s { + struct viewEffect_s * next; + rvRenderEffectLocal * effectDef; + idScreenRect scissorRect; + int weaponDepthHackInViewID; + float modelDepthHack; + float modelMatrix[16]; + float modelViewMatrix[16]; + float distanceToCamera; +} viewEffect_t; + + const int MAX_CLIP_PLANES = 1; // we may expand this to six for some subview issues // viewDefs are allocated on the frame temporary stack memory @@ -456,6 +471,7 @@ typedef struct viewDef_s { struct viewLight_s *viewLights; // chain of all viewLights effecting view struct viewEntity_s *viewEntitys; // chain of all viewEntities effecting view, including off screen ones casting shadows + struct viewEffect_s *viewEffects; // chain of visible Quake 4 BSE effects // we use viewEntities as a check to see if a given view consists solely // of 2D rendering, which we can optimize in certain ways. A 2D view will // not have any viewEntities @@ -1138,6 +1154,8 @@ const int GLS_DSTBLEND_SRC_ALPHA = 0x00000050; const int GLS_DSTBLEND_ONE_MINUS_SRC_ALPHA = 0x00000060; const int GLS_DSTBLEND_DST_ALPHA = 0x00000070; const int GLS_DSTBLEND_ONE_MINUS_DST_ALPHA = 0x00000080; +const int GLS_DSTBLEND_DST_COLOR = 0x00000090; +const int GLS_DSTBLEND_ONE_MINUS_DST_COLOR = 0x000000a0; const int GLS_DSTBLEND_BITS = 0x000000f0; @@ -1293,10 +1311,13 @@ bool R_IssueEntityDefCallback( idRenderEntityLocal *def ); idRenderModel *R_EntityDefDynamicModel( idRenderEntityLocal *def ); viewEntity_t *R_SetEntityDefViewEntity( idRenderEntityLocal *def ); +viewEffect_t *R_SetEffectDefViewEntity( rvRenderEffectLocal *def ); viewLight_t *R_SetLightDefViewLight( idRenderLightLocal *def ); void R_AddDrawSurf( const srfTriangles_t *tri, const viewEntity_t *space, const renderEntity_t *renderEntity, const idMaterial *shader, const idScreenRect &scissor, unsigned int flags = 0 ); +void R_AddDrawSurf( const srfTriangles_t *tri, const viewEffect_t *space, const renderEffect_t *renderEffect, + const idMaterial *shader, const idScreenRect &scissor, unsigned int flags = 0 ); void R_LinkLightSurf( const drawSurf_t **link, const srfTriangles_t *tri, const viewEntity_t *space, const idRenderLightLocal *light, const idMaterial *shader, const idScreenRect &scissor, bool viewInsideShadow ); @@ -1323,6 +1344,7 @@ void R_SetLightProject( idPlane lightProject[4], const idVec3 origin, const idVe void R_AddLightSurfaces( void ); void R_AddModelSurfaces( void ); +void R_AddEffectSurfaces( void ); void R_RemoveUnecessaryViewLights( void ); void R_FreeDerivedData( void ); diff --git a/src/renderer/tr_main.cpp b/src/renderer/tr_main.cpp index 8644161..1816953 100644 --- a/src/renderer/tr_main.cpp +++ b/src/renderer/tr_main.cpp @@ -305,7 +305,9 @@ void *R_StaticAlloc( int bytes ) { tr.staticAllocCount += bytes; - buf = Mem_Alloc( bytes ); + // Quake 4's renderer static allocations are 16-byte aligned. A number of + // the retail SSE/SSE2 paths use aligned loads directly from these blocks. + buf = Mem_Alloc16( bytes, MA_RENDER ); // don't exit on failure on zero length allocations since the old code didn't if ( !buf && ( bytes != 0 ) ) { @@ -334,7 +336,7 @@ R_StaticFree */ void R_StaticFree( void *data ) { tr.pc.c_free++; - Mem_Free( data ); + Mem_Free16( data ); } /* @@ -1111,6 +1113,9 @@ void R_RenderView( viewDef_t *parms ) { // lists R_AddModelSurfaces(); + // instantiate and add the transient geometry generated by visible BSE effects + R_AddEffectSurfaces(); + // any viewLight that didn't have visible surfaces can have it's shadows removed R_RemoveUnecessaryViewLights(); diff --git a/src/sound/snd_shader.cpp b/src/sound/snd_shader.cpp index b731145..3988641 100644 --- a/src/sound/snd_shader.cpp +++ b/src/sound/snd_shader.cpp @@ -49,7 +49,7 @@ void idSoundShader::Init() { errorDuringParse = false; noShakes = false; frequentlyUsed = false; - leadinVolume = 0.0f; + leadinVolume = 1.0f; memset( leadins, 0, sizeof( leadins ) ); numLeadins = 0; memset( entries, 0, sizeof( entries ) ); @@ -70,7 +70,7 @@ void idSoundShader::FreeData() { shakes.Clear(); } -const char *idSoundShader::DefaultDefinition() const { return "{\n\t_default.wav\n}"; } +const char *idSoundShader::DefaultDefinition() const { return "{\n\tsound/_default.wav\n}"; } bool idSoundShader::SetDefaultText() { idStr wavName = GetName(); @@ -106,29 +106,79 @@ bool idSoundShader::Parse( const char *text, int textLength, bool noCaching ) { bool idSoundShader::ParseShader( idLexer &src ) { idToken token; - int maxSamples = idSoundSystemLocal::s_maxSoundsPerShader.GetInteger(); - if ( maxSamples <= 0 || maxSamples > SOUND_MAX_LIST_WAVS ) maxSamples = SOUND_MAX_LIST_WAVS; - while ( src.ReadToken( &token ) ) { - if ( token == "}" ) return true; + memset( &parms, 0, sizeof( parms ) ); + parms.minDistance = 40.0f; + parms.maxDistance = 400.0f; + parms.volume = 1.0f; + parms.frequencyShift = 1.0f; + minFrequencyShift = 1.0f; + maxFrequencyShift = 1.0f; + altSound = NULL; + memset( leadins, 0, sizeof( leadins ) ); + memset( entries, 0, sizeof( entries ) ); + numLeadins = 0; + numEntries = 0; + + int maxSamples = idSoundSystemLocal::s_maxSoundsPerShader.GetInteger(); + if ( com_makingBuild.GetBool() || maxSamples <= 0 || maxSamples > SOUND_MAX_LIST_WAVS ) { + maxSamples = SOUND_MAX_LIST_WAVS; + } + + while ( src.ExpectAnyToken( &token ) ) { + if ( token == "}" ) { + if ( !soundSystem->GetInsideLevelLoad() ) { + soundSystem->ValidateSoundShader( this ); + } + return true; + } + if ( !token.Icmp( "minSamples" ) ) { + maxSamples = idMath::ClampInt( src.ParseInt(), SOUND_MAX_LIST_WAVS, maxSamples ); + continue; + } + if ( !token.Icmp( "frequencyshift" ) ) { + minFrequencyShift = src.ParseFloat(); + if ( !src.ExpectTokenString( "," ) ) { + src.FreeSource(); + return false; + } + maxFrequencyShift = src.ParseFloat(); + continue; + } if ( !token.Icmp( "description" ) ) { if ( src.ReadTokenOnLine( &token ) ) desc = token; continue; } if ( !token.Icmp( "mindistance" ) ) { parms.minDistance = src.ParseFloat(); continue; } if ( !token.Icmp( "maxdistance" ) ) { parms.maxDistance = src.ParseFloat(); continue; } - if ( !token.Icmp( "volume" ) ) { parms.volume = src.ParseFloat(); continue; } - if ( !token.Icmp( "attenuatedVolume" ) ) { parms.attenuatedVolume = src.ParseFloat(); continue; } + if ( !token.Icmp( "volumeDb" ) ) { + float volumeDb = src.ParseFloat(); + if ( volumeDb > 10.0f ) { + common->Warning( "Clamping volume of '%s' to +10dB (3 times louder)", GetName() ); + volumeDb = 10.0f; + } + parms.volume = idMath::dBToScale( volumeDb ); + continue; + } if ( !token.Icmp( "leadinVolume" ) ) { leadinVolume = src.ParseFloat(); continue; } - if ( !token.Icmp( "soundClass" ) ) { parms.soundClass = idMath::ClampInt( 0, SOUND_MAX_CLASSES - 1, src.ParseInt() ); continue; } - if ( !token.Icmp( "frequencyShift" ) ) { parms.frequencyShift = src.ParseFloat(); continue; } - if ( !token.Icmp( "minFrequencyShift" ) ) { minFrequencyShift = src.ParseFloat(); continue; } - if ( !token.Icmp( "maxFrequencyShift" ) ) { maxFrequencyShift = src.ParseFloat(); continue; } - if ( !token.Icmp( "wetLevel" ) ) { parms.wetLevel = src.ParseFloat(); continue; } - if ( !token.Icmp( "dryLevel" ) ) { parms.dryLevel = src.ParseFloat(); continue; } + if ( !token.Icmp( "soundClass" ) ) { + parms.soundClass = src.ParseInt(); + if ( parms.soundClass < 0 || parms.soundClass >= SOUND_MAX_CLASSES ) { + src.Warning( "SoundClass out of range" ); + return false; + } + continue; + } if ( !token.Icmp( "shakes" ) ) { - if ( src.ReadToken( &token ) ) { + if ( src.ExpectAnyToken( &token ) ) { if ( token.type == TT_NUMBER ) parms.shakes = token.GetFloatValue(); else { parms.shakes = 1.0f; src.UnreadToken( &token ); } } continue; } + if ( !token.Icmp( "shakeData" ) ) { + if ( !src.ExpectAnyToken( &token ) ) return false; + const int shakeIndex = atoi( token.c_str() ); + if ( !src.ExpectAnyToken( &token ) ) return false; + SetShakeData( shakeIndex, token.c_str() ); + continue; + } if ( !token.Icmp( "altSound" ) ) { if ( src.ReadToken( &token ) ) altSound = declManager->FindSound( token ); continue; } if ( !token.Icmp( "frequentlyUsed" ) ) { frequentlyUsed = true; continue; } if ( !token.Icmp( "no_shakes" ) ) { noShakes = true; continue; } @@ -142,24 +192,27 @@ bool idSoundShader::ParseShader( idLexer &src ) { if ( !token.Icmp( "global" ) ) { parms.soundShaderFlags |= SSF_GLOBAL; continue; } if ( !token.Icmp( "unclamped" ) ) { parms.soundShaderFlags |= SSF_UNCLAMPED; continue; } if ( !token.Icmp( "omnidirectional" ) ) { parms.soundShaderFlags |= SSF_OMNIDIRECTIONAL; continue; } - if ( !token.Icmp( "doppler" ) ) { parms.soundShaderFlags |= SSF_USEDOPPLER; continue; } - if ( !token.Icmp( "no_randomstart" ) ) { parms.soundShaderFlags |= SSF_NO_RANDOMSTART; continue; } - if ( !token.Icmp( "vo" ) ) { parms.soundShaderFlags |= SSF_IS_VO; continue; } - if ( !token.Icmp( "center" ) ) { parms.soundShaderFlags |= SSF_CENTER; continue; } - if ( !token.Icmp( "ordered" ) || !token.Icmp( "plain" ) || !token.Icmp( "onDemand" ) ) continue; - if ( !token.Icmp( "reverb" ) ) { src.ReadTokenOnLine( &token ); continue; } + if ( !token.Icmp( "useDoppler" ) ) { parms.soundShaderFlags |= SSF_USEDOPPLER; continue; } + if ( !token.Icmp( "noRandomStart" ) ) { parms.soundShaderFlags |= SSF_NO_RANDOMSTART; continue; } + if ( !token.Icmp( "voForPlayer" ) ) { parms.soundShaderFlags |= SSF_VO_FOR_PLAYER; continue; } + if ( !token.Icmp( "onDemand" ) ) continue; if ( !token.Icmp( "leadin" ) ) { if ( !src.ReadToken( &token ) ) return false; - if ( numLeadins < maxSamples ) leadins[numLeadins++] = soundSystemLocal.FindSample( token ); + if ( soundSystem->HasCache() && numLeadins < maxSamples ) { + leadins[numLeadins++] = soundSystem->FindSample( token ); + } continue; } - if ( token.Find( ".wav", false ) >= 0 || token.Find( ".ogg", false ) >= 0 ) { - token.BackSlashesToSlashes(); - if ( numEntries < maxSamples ) entries[numEntries++] = soundSystemLocal.FindSample( token ); - continue; + + // In Quake 4 every otherwise-unrecognized token is a sample name. The + // retail assets intentionally omit .wav/.ogg on many VO and shake rows. + if ( soundSystem->HasCache() && numEntries < maxSamples ) { + rvCommonSample *sample = soundSystem->FindSample( token ); + if ( sample != NULL ) { + entries[numEntries++] = sample; + } } - src.Warning( "unknown token '%s' in sound shader '%s'", token.c_str(), GetName() ); } return false; } diff --git a/src/ui/UserInterface.h b/src/ui/UserInterface.h index ec1c770..f802f35 100644 --- a/src/ui/UserInterface.h +++ b/src/ui/UserInterface.h @@ -206,7 +206,7 @@ public: // Returns NULL if gui by that name does not exist. virtual idUserInterface * FindGui( const char *qpath, bool autoLoad = false, bool needUnique = false, bool forceUnique = false ) = 0; -#ifdef Q4_RECON_ENGINE_PRIVATE +#if defined( Q4_RECON_ENGINE_PRIVATE ) || defined( Q4_RECON_RETAIL_UI_MANAGER_ABI ) // Retail engine slot; the three index helpers below are later SDK additions. virtual idUserInterface * FindDemoGui( const char *qpath ) = 0; #else diff --git a/src/ui/guiscript.cpp b/src/ui/guiscript.cpp index 6254356..5354976 100644 --- a/src/ui/guiscript.cpp +++ b/src/ui/guiscript.cpp @@ -222,10 +222,6 @@ void Script_ResetTime(idWindow *window, idList *src) { drawWin_t *win = NULL; if (parm && src->Num() > 1) { win = window->GetGui()->GetDesktop()->FindChildByName(*parm); - if ( !idStr::Icmp( parm->c_str(), "anim_in" ) || !idStr::Icmp( parm->c_str(), "anim_newIn" ) ) { - common->DPrintf( "Q4 menu trace: resetTime requested '%s', resolved '%s'\n", - parm->c_str(), ( win && win->win ) ? win->win->GetName() : "" ); - } parm = dynamic_cast((*src)[1].var); } if (win && win->win) { @@ -252,66 +248,48 @@ Script_Transition ========================= */ void Script_Transition(idWindow *window, idList *src) { - // transitions always affect rect or vec4 vars - if (src->Num() >= 4) { - idWinRectangle *rect = NULL; - idWinVec4 *vec4 = dynamic_cast((*src)[0].var); - // - // added float variable - idWinFloat* val = NULL; - idWinFloatMember *member = NULL; - // - if (vec4 == NULL) { - rect = dynamic_cast((*src)[0].var); - // - // added float variable - if ( NULL == rect ) { - val = dynamic_cast((*src)[0].var); - if ( NULL == val ) { - member = dynamic_cast((*src)[0].var); - } - } - // - } - idWinVec4 *from = dynamic_cast((*src)[1].var); - idWinVec4 *to = dynamic_cast((*src)[2].var); - idWinStr *timeStr = dynamic_cast((*src)[3].var); - // - // added float variable - if (!((vec4 || rect || val || member) && from && to && timeStr)) { - // - common->Warning("Bad transition in gui %s in window %s\n", window->GetGui()->GetSourceFile(), window->GetName()); - return; - } - int time = atoi(*timeStr); - float ac = 0.0f; - float dc = 0.0f; - if (src->Num() > 4) { - idWinStr *acv = dynamic_cast((*src)[4].var); - idWinStr *dcv = dynamic_cast((*src)[5].var); - assert(acv && dcv); - ac = atof(*acv); - dc = atof(*dcv); - } - - if (vec4) { - vec4->SetEval(false); - window->AddTransition(vec4, *from, *to, time, ac, dc); - // - // added float variable - } else if ( val ) { - val->SetEval ( false ); - window->AddTransition(val, *from, *to, time, ac, dc); - } else if ( member ) { - member->SetEval( false ); - window->AddTransition( member, *from, *to, time, ac, dc ); - // - } else { - rect->SetEval(false); - window->AddTransition(rect, *from, *to, time, ac, dc); - } - window->StartTransition(); + if ( src->Num() < 4 ) { + return; } + + idWinVar *destination = (*src)[0].var; + idWinInt *timeVar = dynamic_cast( (*src)[3].var ); + if ( !destination || !timeVar ) { + common->Warning( "Bad transition in gui %s in window %s\n", window->GetGui()->GetSourceFile(), window->GetName() ); + return; + } + + idVec4 from; + idVec4 to; + idWinVec4 *fromVec = dynamic_cast( (*src)[1].var ); + idWinVec4 *toVec = dynamic_cast( (*src)[2].var ); + if ( fromVec ) { + from = static_cast( *fromVec ); + } else { + const float value = (*src)[1].var->x(); + from.Set( value, value, value, value ); + } + if ( toVec ) { + to = static_cast( *toVec ); + } else { + const float value = (*src)[2].var->x(); + to.Set( value, value, value, value ); + } + + float accel = 0.0f; + float decel = 0.0f; + if ( src->Num() > 5 ) { + idWinFloat *accelVar = dynamic_cast( (*src)[4].var ); + idWinFloat *decelVar = dynamic_cast( (*src)[5].var ); + if ( accelVar && decelVar ) { + accel = *accelVar; + decel = *decelVar; + } + } + + destination->SetEval( false ); + window->AddTransition( destination, from, to, *timeVar, accel, decel ); + window->StartTransition(); } typedef struct { @@ -591,73 +569,110 @@ void idGuiScript::FixupParms(idWindow *win) { } } else if (handler == &Script_Transition) { if (parms.Num() < 4) { - common->Warning("Window %s in gui %s has a bad transition definition", win->GetName(), win->GetGui()->GetSourceFile()); + common->Warning("Window %s in gui %s has a bad transition definition", win->GetName(), win->GetGui()->GetSourceFile()); + handler = NULL; + return; } idWinStr *str = dynamic_cast(parms[0].var); assert(str); - // - drawWin_t *destowner; - idWinVar *dest = win->GetWinVarByName(*str, true, &destowner ); - // - - if (dest) { - delete parms[0].var; - parms[0].var = dest; - parms[0].own = false; - } else { + drawWin_t *destOwner = NULL; + idWinVar *dest = win->GetWinVarByName(*str, true, &destOwner ); + idWinVec4 *destVec = dynamic_cast( dest ); + idWinFloat *destFloat = dynamic_cast( dest ); + idWinRectangle *destRect = dynamic_cast( dest ); + idWinFloatMember *destMember = dynamic_cast( dest ); + if ( !destVec && !destFloat && !destRect && !destMember ) { common->Warning("Window %s in gui %s: a transition does not have a valid destination var %s", win->GetName(), win->GetGui()->GetSourceFile(),str->c_str()); handler = NULL; return; } + delete parms[0].var; + parms[0].var = dest; + parms[0].own = false; - // - // support variables as parameters - int c; - for ( c = 1; c < 3; c ++ ) { + // Quake 4 retains scalar transition parameters as floats and vector / + // rectangle parameters as vec4s. Script_Transition then expands a + // scalar into all four interpolation lanes. + for ( int c = 1; c < 3; c++ ) { str = dynamic_cast(parms[c].var); + assert( str ); - idWinVec4 *v4 = new idWinVec4; - parms[c].var = v4; - parms[c].own = true; + if ( str->c_str()[0] == '$' ) { + drawWin_t *sourceOwner = NULL; + idWinVar *source = win->GetWinVarByName( str->c_str() + 1, true, &sourceOwner ); + idWinVec4 *sourceVec = dynamic_cast( source ); + idWinFloat *sourceFloat = dynamic_cast( source ); + idWinRectangle *sourceRect = dynamic_cast( source ); + idWinFloatMember *sourceMember = dynamic_cast( source ); - drawWin_t* owner; + const bool compatible = + ( destVec && sourceVec ) || + ( destFloat && sourceFloat ) || + ( destRect && ( sourceVec || sourceRect ) ) || + ( destMember && ( sourceFloat || sourceMember ) ); + if ( !compatible ) { + common->Warning( "Window %s in gui %s: transition has an invalid parameter %d (%s)", + win->GetName(), win->GetGui()->GetSourceFile(), c, str->c_str() ); + handler = NULL; + return; + } - if ( (*str[0]) == '$' ) { - dest = win->GetWinVarByName ( (const char*)(*str) + 1, true, &owner ); - } else { - dest = NULL; - } - - if ( dest ) { - idWindow* ownerparent; - idWindow* destparent; - if ( owner ) { - ownerparent = owner->simp?owner->simp->GetParent():owner->win->GetParent(); - destparent = destowner->simp?destowner->simp->GetParent():destowner->win->GetParent(); - - // If its the rectangle they are referencing then adjust it - if ( ownerparent && destparent && - (dest == (owner->simp?owner->simp->GetWinVarByName ( "rect" ):owner->win->GetWinVarByName ( "rect" ) ) ) ) - { - idRectangle rect; - rect = *(dynamic_cast(dest)); - ownerparent->ClientToScreen ( &rect ); - destparent->ScreenToClient ( &rect ); - *v4 = rect.ToVec4 ( ); + if ( destRect && sourceRect ) { + idWinVec4 *value = new idWinVec4; + *value = idVec4( 0.0f, 0.0f, 0.0f, 0.0f ); + idWindow *sourceParent = sourceOwner ? + ( sourceOwner->simp ? sourceOwner->simp->GetParent() : sourceOwner->win->GetParent() ) : NULL; + idWindow *destinationParent = destOwner ? + ( destOwner->simp ? destOwner->simp->GetParent() : destOwner->win->GetParent() ) : NULL; + if ( sourceParent && destinationParent ) { + idRectangle rect = *sourceRect; + sourceParent->ClientToScreen( &rect ); + destinationParent->ScreenToClient( &rect ); + *value = rect.ToVec4(); } else { - v4->Set ( dest->c_str ( ) ); + value->Set( sourceRect->c_str() ); } + parms[c].var = value; + parms[c].own = true; } else { - v4->Set ( dest->c_str ( ) ); + parms[c].var = source; + parms[c].own = false; } } else { - v4->Set(*str); - } - + idWinVar *value; + if ( destVec || destRect ) { + idWinVec4 *vecValue = new idWinVec4; + *vecValue = idVec4( 0.0f, 0.0f, 0.0f, 0.0f ); + value = vecValue; + } else { + value = new idWinFloat; + } + value->Set( str->c_str() ); + parms[c].var = value; + parms[c].own = true; + } + delete str; - } - // + } + + str = dynamic_cast( parms[3].var ); + assert( str ); + idWinInt *time = new idWinInt; + time->Set( str->c_str() ); + delete str; + parms[3].var = time; + parms[3].own = true; + + for ( int i = 4; i < parms.Num() && i < 6; i++ ) { + str = dynamic_cast( parms[i].var ); + assert( str ); + idWinFloat *value = new idWinFloat; + value->Set( str->c_str() ); + delete str; + parms[i].var = value; + parms[i].own = true; + } } else { int c = parms.Num(); diff --git a/src/ui/window.cpp b/src/ui/window.cpp index 95bf3ca..d0ca1f3 100644 --- a/src/ui/window.cpp +++ b/src/ui/window.cpp @@ -612,6 +612,10 @@ idWindow::RunTimeEvents */ bool idWindow::RunTimeEvents(int time) { + if ( lastTimeRun > time ) { + lastTimeRun = time; + } + if ( time - lastTimeRun < common->GetUserCmdMSec() ) { //common->Printf("Skipping gui time events at %i\n", time); return false; @@ -659,10 +663,6 @@ void idWindow::RunNamedEvent ( const char* eventName ) continue; } UpdateWinVars(); - const bool traceIngameCheck = !idStr::Icmp( eventName, "ingameCheck" ); - if ( traceIngameCheck ) { - common->DPrintf( "Q4 menu trace: ingameCheck begin gui::inGame='%s'\n", gui->State().GetString( "inGame" ) ); - } // Make sure we got all the current values for stuff if (expressionRegisters.Num() && ops.Num()) { @@ -670,11 +670,6 @@ void idWindow::RunNamedEvent ( const char* eventName ) } RunScriptList( namedEvents[i]->mEvent ); - if ( traceIngameCheck ) { - drawWin_t *newGame = gui->GetDesktop()->FindChildByName( "main_b_newgame" ); - idWinVar *shown = newGame ? ( newGame->win ? newGame->win->GetWinVarByName( "visible" ) : newGame->simp->GetWinVarByName( "visible" ) ) : NULL; - common->DPrintf( "Q4 menu trace: ingameCheck end main_b_newgame visible=%s\n", shown ? shown->c_str() : "" ); - } break; } @@ -1079,10 +1074,6 @@ idWindow::Time ================ */ void idWindow::Time() { - - if ( !idStr::Icmp( name, "anim_newIn" ) && !noTime ) { - common->DPrintf( "Q4 menu trace: anim_newIn unexpectedly active at guiTime=%d epoch=%d\n", gui->GetTime(), timeLine ); - } if ( noTime ) { return; @@ -1098,10 +1089,6 @@ void idWindow::Time() { if ( c > 0 ) { for (int i = 0; i < c; i++) { if ( timeLineEvents[i]->pending && gui->GetTime() - timeLine >= timeLineEvents[i]->time ) { - if ( !idStr::Icmp( name, "anim_in" ) || !idStr::Icmp( name, "video_bethsoft" ) ) { - common->DPrintf( "Q4 menu trace: timeline '%s' firing %d at guiTime=%d epoch=%d\n", - name.c_str(), timeLineEvents[i]->time, gui->GetTime(), timeLine ); - } timeLineEvents[i]->pending = false; RunScriptList( timeLineEvents[i]->event ); } @@ -2646,9 +2633,6 @@ bool idWindow::Parse( idParser *src, bool rebuild) { SetupFromState(); PostParse(); - if ( !idStr::Icmp( name, "anim_newIn" ) ) { - common->DPrintf( "Q4 menu trace: parsed anim_newIn notime=%d events=%d\n", noTime ? 1 : 0, timeLineEvents.Num() ); - } // hook into the main window parsing for the gui editor // If we are in the gui editor then add the internal var to the @@ -2772,10 +2756,6 @@ idWindow::ResetTime ================ */ void idWindow::ResetTime(int t) { - if ( !idStr::Icmp( name, "anim_in" ) || !idStr::Icmp( name, "anim_newIn" ) || !idStr::Icmp( name, "video_bethsoft" ) ) { - common->DPrintf( "Q4 menu trace: ResetTime '%s' t=%d guiTime=%d\n", name.c_str(), t, gui->GetTime() ); - } - timeLine = gui->GetTime() - t; int i, c = timeLineEvents.Num(); @@ -3239,9 +3219,10 @@ void idWindow::EvaluateRegisters(float *registers) { break; } if ( op->b >= 0 && registers[op->b] >= 0 && registers[op->b] < 4 ) { - // grabs vector components - idWinVec4 *var = (idWinVec4 *)( op->a ); - registers[op->c] = ((idVec4&)var)[registers[op->b]]; + // The operand is an idWinVar pointer. Casting the local pointer + // itself to idVec4 reads unrelated stack data and makes GUI color + // expressions depend on the current stack layout. + registers[op->c] = ((idWinVar *)(op->a))->GetMember( (int)registers[op->b] ); } else { registers[op->c] = ((idWinVar*)(op->a))->x(); }