diff --git a/Demos/CMakeLists.txt b/Demos/CMakeLists.txt index 5e3cf576c..55aa0fe17 100644 --- a/Demos/CMakeLists.txt +++ b/Demos/CMakeLists.txt @@ -1,4 +1,4 @@ -SUBDIRS( OpenGL BasicDemo Benchmarks Box2dDemo SerializeDemo ) +SUBDIRS( OpenGL BasicDemo Benchmarks Box2dDemo ConvexDecompositionDemo SerializeDemo ) #todo: re-enable the rest of the demos again diff --git a/Demos/ConvexDecompositionDemo/CMakeLists.txt b/Demos/ConvexDecompositionDemo/CMakeLists.txt index 00bf5ac91..5740760d0 100644 --- a/Demos/ConvexDecompositionDemo/CMakeLists.txt +++ b/Demos/ConvexDecompositionDemo/CMakeLists.txt @@ -12,15 +12,36 @@ SET(GLUT_ROOT ${BULLET_PHYSICS_SOURCE_DIR}/Glut) ######################################################## INCLUDE_DIRECTORIES( -${BULLET_PHYSICS_SOURCE_DIR}/src ${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL ${BULLET_PHYSICS_SOURCE_DIR}/Extras/ConvexDecomposition +${BULLET_PHYSICS_SOURCE_DIR}/src +${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL +${BULLET_PHYSICS_SOURCE_DIR}/Extras/ConvexDecomposition +${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletFileLoader ) +IF (USE_GLUT) + + LINK_LIBRARIES( + OpenGLSupport BulletDynamics BulletCollision LinearMath BulletFileLoader ConvexDecomposition ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} + ) + + ADD_EXECUTABLE(AppConvexDecompositionDemo + main.cpp + ConvexDecompositionDemo.cpp + ConvexDecompositionDemo.h + ) +ELSE (USE_GLUT) + LINK_LIBRARIES( -OpenGLSupport BulletDynamics BulletCollision LinearMath ConvexDecomposition ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} -) + OpenGLSupport BulletDynamics BulletCollision LinearMath BulletFileLoader ConvexDecomposition ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} + ) -ADD_EXECUTABLE(AppConvexDecompositionDemo - main.cpp - ConvexDecompositionDemo.cpp -) + ADD_EXECUTABLE(AppConvexDecompositionDemo + WIN32 + ../OpenGL/Win32AppMain.cpp + ConvexDecompositionDemo.cpp + ConvexDecompositionDemo.h + Win32ConvexDecompositionDemo.cpp + ) + +ENDIF (USE_GLUT) diff --git a/Demos/ConvexDecompositionDemo/ConvexDecompositionDemo.cpp b/Demos/ConvexDecompositionDemo/ConvexDecompositionDemo.cpp index 8579cfd92..e919639ef 100644 --- a/Demos/ConvexDecompositionDemo/ConvexDecompositionDemo.cpp +++ b/Demos/ConvexDecompositionDemo/ConvexDecompositionDemo.cpp @@ -23,6 +23,14 @@ subject to the following restrictions: #include "LinearMath/btGeometryUtil.h" #include "BulletCollision/CollisionShapes/btShapeHull.h" +#define TEST_SERIALIZATION + +#ifdef TEST_SERIALIZATION +#include "LinearMath/btSerializer.h" +#include "btBulletFile.h" +#include "btBulletFileLoader.h" +#endif + //#define USE_PARALLEL_DISPATCHER 1 #ifdef USE_PARALLEL_DISPATCHER #include "../../Extras/BulletMultiThreaded/SpuGatheringCollisionDispatcher.h" @@ -91,27 +99,9 @@ bool MyContactCallback ( } -void ConvexDecompositionDemo::initPhysics(const char* filename) +void ConvexDecompositionDemo::setupEmptyDynamicsWorld() { - gContactAddedCallback = &MyContactCallback; - - setTexturing(true); - setShadows(true); - - setCameraDistance(26.f); - - ConvexDecomposition::WavefrontObj wo; - - tcount = wo.loadObj(filename); - - if (!tcount) - { - //when running this app from visual studio, the default starting folder is different, so make a second attempt... - tcount = wo.loadObj("../../file.obj"); - } - - - m_collisionConfiguration = new btDefaultCollisionConfiguration(); +m_collisionConfiguration = new btDefaultCollisionConfiguration(); #ifdef USE_PARALLEL_DISPATCHER #ifdef USE_WIN32_THREADING @@ -151,6 +141,30 @@ void ConvexDecompositionDemo::initPhysics(const char* filename) m_dynamicsWorld->getDispatchInfo().m_enableSPU = true; #endif //USE_PARALLEL_DISPATCHER +} + +void ConvexDecompositionDemo::initPhysics(const char* filename) +{ + gContactAddedCallback = &MyContactCallback; + + setTexturing(true); + setShadows(true); + + setCameraDistance(26.f); + + ConvexDecomposition::WavefrontObj wo; + + tcount = wo.loadObj(filename); + + if (!tcount) + { + //when running this app from visual studio, the default starting folder is different, so make a second attempt... + tcount = wo.loadObj("../../file.obj"); + } + + + setupEmptyDynamicsWorld(); + btTransform startTransform; startTransform.setIdentity(); startTransform.setOrigin(btVector3(0,-4.5,0)); @@ -293,7 +307,7 @@ void ConvexDecompositionDemo::initPhysics(const char* filename) btConvexHullShape* convexShape = new btConvexHullShape(&(vertices[0].getX()),vertices.size()); #endif - convexShape->setMargin(0.01); + convexShape->setMargin(0.01f); m_convexShapes.push_back(convexShape); m_convexCentroids.push_back(centroid); m_convexDemo->m_collisionShapes.push_back(convexShape); @@ -371,7 +385,7 @@ void ConvexDecompositionDemo::initPhysics(const char* filename) btTransform startTransform; startTransform.setIdentity(); - startTransform.setOrigin(btVector3(0,2,0)); + startTransform.setOrigin(btVector3(0,2,14)); localCreateRigidBody(mass, startTransform,convexShape); @@ -438,6 +452,9 @@ void ConvexDecompositionDemo::initPhysics(const char* filename) trans.setOrigin(centroid); btConvexHullShape* convexShape = convexDecomposition.m_convexShapes[i]; compound->addChildShape(trans,convexShape); + + btRigidBody* body = localCreateRigidBody( 1.0, trans,convexShape); + } btScalar mass=10.f; trans.setOrigin(-convexDecompositionObjectOffset); @@ -464,6 +481,30 @@ void ConvexDecompositionDemo::initPhysics(const char* filename) } +#ifdef TEST_SERIALIZATION + //test serializing this + + int maxSerializeBufferSize = 1024*1024*5; + + btDefaultSerializer* serializer = new btDefaultSerializer(maxSerializeBufferSize); + m_dynamicsWorld->serialize(serializer); + + FILE* f2 = fopen("testFile.bullet","wb"); + fwrite(serializer->getBufferPointer(),serializer->getCurrentBufferSize(),1,f2); + fclose(f2); + + exitPhysics(); + + //now try again from the loaded file + setupEmptyDynamicsWorld(); + + btBulletFileLoader* fileLoader = new btBulletFileLoader(m_dynamicsWorld); + + fileLoader->loadFileFromMemory("testFile.bullet"); + + + +#endif //TEST_SERIALIZATION } @@ -481,7 +522,7 @@ void ConvexDecompositionDemo::clientMoveAndDisplay() renderme(); glFlush(); - glutSwapBuffers(); + swapBuffers(); } @@ -499,7 +540,7 @@ void ConvexDecompositionDemo::displayCallback(void) { glFlush(); - glutSwapBuffers(); + swapBuffers(); } @@ -532,12 +573,16 @@ void ConvexDecompositionDemo::exitPhysics() delete shape; } + m_collisionShapes.clear(); + for (i=0;im_localPositionArraySize; @@ -105,16 +105,26 @@ bool btBulletFileLoader::loadFileFromMemory( bParse::btBulletFile* bulletFile2) btAlignedObjectArray radii; radii.resize(numSpheres); tmpPos.resize(numSpheres); - for (int i=0;im_localPositionArrayPtr[i].m_pos); radii[i] = mss->m_localPositionArrayPtr[i].m_radius; } - - shape = new btMultiSphereShape(&tmpPos[0],&radii[0],numSpheres); -#endif + break; + } + case CONVEX_HULL_SHAPE_PROXYTYPE: + { + btConvexHullShapeData* convexData = (btConvexHullShapeData*)bsd; + int numPoints = convexData->m_numUnscaledPoints; + + btAlignedObjectArray tmpPoints; + tmpPoints.resize(numPoints); + for (int i=0;im_unscaledPointsPtr[i]); + } + shape = new btConvexHullShape(&tmpPoints[0].getX(),numPoints,sizeof(btVector3)); break; } default: diff --git a/Extras/Serialize/HeaderGenerator/createDnaString.bat b/Extras/Serialize/HeaderGenerator/createDnaString.bat index 1e380ae65..cdadf4a14 100644 --- a/Extras/Serialize/HeaderGenerator/createDnaString.bat +++ b/Extras/Serialize/HeaderGenerator/createDnaString.bat @@ -1,3 +1,5 @@ +delete dnaString.txt + Debug\HeaderGenerator.exe python bulletGenerate.py \ No newline at end of file diff --git a/Extras/Serialize/makesdna/makesdna.cpp b/Extras/Serialize/makesdna/makesdna.cpp index 5a0e28e8c..cde5b7b03 100644 --- a/Extras/Serialize/makesdna/makesdna.cpp +++ b/Extras/Serialize/makesdna/makesdna.cpp @@ -125,6 +125,7 @@ typedef unsigned long uintptr_t; #include "BulletCollision/CollisionShapes/btCollisionShape.h" #include "BulletCollision/CollisionShapes/btConvexInternalShape.h" #include "BulletCollision/CollisionShapes/btMultiSphereShape.h" +#include "BulletCollision/CollisionShapes/btConvexHullShape.h" #include "BulletCollision/CollisionDispatch/btCollisionObject.h" #include "BulletDynamics/Dynamics/btRigidBody.h" @@ -148,6 +149,7 @@ char *includefiles[] = { "../../../src/BulletCollision/CollisionShapes/btCollisionShape.h", "../../../src/BulletCollision/CollisionShapes/btConvexInternalShape.h", "../../../src/BulletCollision/CollisionShapes/btMultiSphereShape.h", + "../../../src/BulletCollision/CollisionShapes/btConvexHullShape.h", "../../../src/BulletCollision/CollisionDispatch/btCollisionObject.h", "../../../src/BulletDynamics/Dynamics/btRigidBody.h", // empty string to indicate end of includefiles diff --git a/src/BulletCollision/CollisionShapes/btConvexHullShape.cpp b/src/BulletCollision/CollisionShapes/btConvexHullShape.cpp index 3008524e0..01281f74e 100644 --- a/src/BulletCollision/CollisionShapes/btConvexHullShape.cpp +++ b/src/BulletCollision/CollisionShapes/btConvexHullShape.cpp @@ -17,7 +17,7 @@ subject to the following restrictions: #include "BulletCollision/CollisionShapes/btCollisionMargin.h" #include "LinearMath/btQuaternion.h" - +#include "LinearMath/btSerializer.h" btConvexHullShape ::btConvexHullShape (const btScalar* points,int numPoints,int stride) : btPolyhedralConvexAabbCachingShape () { @@ -186,3 +186,28 @@ bool btConvexHullShape::isInside(const btVector3& ,btScalar ) const return false; } +///fills the dataBuffer and returns the struct name (and 0 on failure) +const char* btConvexHullShape::serialize(void* dataBuffer, btSerializer* serializer) const +{ + btConvexHullShapeData* shapeData = (btConvexHullShapeData*) dataBuffer; + btConvexInternalShape::serialize(&shapeData->m_convexInternalShapeData, serializer); + + int numElem = m_unscaledPoints.size(); + shapeData->m_numUnscaledPoints = numElem; + shapeData->m_unscaledPointsPtr = numElem ? (btVector3Data*)&m_unscaledPoints[0]: 0; + + if (numElem) + { + btChunk* chunk = serializer->allocate(sizeof(btVector3Data),numElem); + btVector3Data* memPtr = (btVector3Data*)chunk->m_oldPtr; + for (int i=0;ifinalizeChunk(chunk,"btVector3Data",BT_ARRAY_CODE,(void*)&m_unscaledPoints[0]); + } + + return "btConvexHullShapeData"; +} + + diff --git a/src/BulletCollision/CollisionShapes/btConvexHullShape.h b/src/BulletCollision/CollisionShapes/btConvexHullShape.h index 2b0494d19..68f04a7e0 100644 --- a/src/BulletCollision/CollisionShapes/btConvexHullShape.h +++ b/src/BulletCollision/CollisionShapes/btConvexHullShape.h @@ -89,8 +89,29 @@ public: ///in case we receive negative scaling virtual void setLocalScaling(const btVector3& scaling); + virtual int calculateSerializeBufferSize(); + + ///fills the dataBuffer and returns the struct name (and 0 on failure) + virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; + }; +struct btConvexHullShapeData +{ + btConvexInternalShapeData m_convexInternalShapeData; + + btVector3Data *m_unscaledPointsPtr; + int m_numUnscaledPoints; + char m_padding[4]; + +}; + +SIMD_FORCE_INLINE int btConvexHullShape::calculateSerializeBufferSize() +{ + return sizeof(btConvexHullShapeData); +} + + #endif //CONVEX_HULL_SHAPE_H diff --git a/src/BulletCollision/CollisionShapes/btMultiSphereShape.cpp b/src/BulletCollision/CollisionShapes/btMultiSphereShape.cpp index 207bda077..5c83faea2 100644 --- a/src/BulletCollision/CollisionShapes/btMultiSphereShape.cpp +++ b/src/BulletCollision/CollisionShapes/btMultiSphereShape.cpp @@ -158,7 +158,7 @@ const char* btMultiSphereShape::serialize(void* dataBuffer, btSerializer* serial m_localPositionArray[i].serialize(memPtr->m_pos); memPtr->m_radius = m_radiArray[i]; } - serializer->finalizeChunk(chunk,"btVector3Data",BT_ARRAY_CODE,(void*)&m_localPositionArray[0]); + serializer->finalizeChunk(chunk,"btPositionAndRadius",BT_ARRAY_CODE,(void*)&m_localPositionArray[0]); } return "btMultiSphereShapeData"; diff --git a/src/LinearMath/btSerializer.cpp b/src/LinearMath/btSerializer.cpp index 8974c2a1d..38ba54d2f 100644 --- a/src/LinearMath/btSerializer.cpp +++ b/src/LinearMath/btSerializer.cpp @@ -1,5 +1,5 @@ unsigned char sBulletDNAstr[]= { -83,68,78,65,78,65,77,69,68,0,0,0,109,95,115,105,122,101,0,109, +83,68,78,65,78,65,77,69,70,0,0,0,109,95,115,105,122,101,0,109, 95,99,97,112,97,99,105,116,121,0,42,109,95,100,97,116,97,0,109,95, 99,111,108,108,105,115,105,111,110,83,104,97,112,101,115,0,109,95,99,111, 108,108,105,115,105,111,110,79,98,106,101,99,116,115,0,109,95,99,111,110, @@ -16,84 +16,89 @@ unsigned char sBulletDNAstr[]= { 101,120,73,110,116,101,114,110,97,108,83,104,97,112,101,68,97,116,97,0, 42,109,95,108,111,99,97,108,80,111,115,105,116,105,111,110,65,114,114,97, 121,80,116,114,0,109,95,108,111,99,97,108,80,111,115,105,116,105,111,110, -65,114,114,97,121,83,105,122,101,0,109,95,119,111,114,108,100,84,114,97, -110,115,102,111,114,109,0,109,95,105,110,116,101,114,112,111,108,97,116,105, -111,110,87,111,114,108,100,84,114,97,110,115,102,111,114,109,0,109,95,105, -110,116,101,114,112,111,108,97,116,105,111,110,76,105,110,101,97,114,86,101, -108,111,99,105,116,121,0,109,95,105,110,116,101,114,112,111,108,97,116,105, -111,110,65,110,103,117,108,97,114,86,101,108,111,99,105,116,121,0,109,95, -97,110,105,115,111,116,114,111,112,105,99,70,114,105,99,116,105,111,110,0, -109,95,104,97,115,65,110,105,115,111,116,114,111,112,105,99,70,114,105,99, -116,105,111,110,0,109,95,99,111,110,116,97,99,116,80,114,111,99,101,115, -115,105,110,103,84,104,114,101,115,104,111,108,100,0,42,109,95,98,114,111, -97,100,112,104,97,115,101,72,97,110,100,108,101,0,42,109,95,99,111,108, -108,105,115,105,111,110,83,104,97,112,101,0,42,109,95,114,111,111,116,67, -111,108,108,105,115,105,111,110,83,104,97,112,101,0,109,95,99,111,108,108, -105,115,105,111,110,70,108,97,103,115,0,109,95,105,115,108,97,110,100,84, -97,103,49,0,109,95,99,111,109,112,97,110,105,111,110,73,100,0,109,95, -97,99,116,105,118,97,116,105,111,110,83,116,97,116,101,49,0,109,95,100, -101,97,99,116,105,118,97,116,105,111,110,84,105,109,101,0,109,95,102,114, -105,99,116,105,111,110,0,109,95,114,101,115,116,105,116,117,116,105,111,110, -0,109,95,105,110,116,101,114,110,97,108,84,121,112,101,0,42,109,95,117, -115,101,114,79,98,106,101,99,116,80,111,105,110,116,101,114,0,109,95,104, -105,116,70,114,97,99,116,105,111,110,0,109,95,99,99,100,83,119,101,112, -116,83,112,104,101,114,101,82,97,100,105,117,115,0,109,95,99,99,100,77, -111,116,105,111,110,84,104,114,101,115,104,111,108,100,0,109,95,99,104,101, -99,107,67,111,108,108,105,100,101,87,105,116,104,0,109,95,99,111,108,108, -105,115,105,111,110,79,98,106,101,99,116,68,97,116,97,0,109,95,105,110, -118,73,110,101,114,116,105,97,84,101,110,115,111,114,87,111,114,108,100,0, -109,95,108,105,110,101,97,114,86,101,108,111,99,105,116,121,0,109,95,97, -110,103,117,108,97,114,86,101,108,111,99,105,116,121,0,109,95,105,110,118, -101,114,115,101,77,97,115,115,0,109,95,97,110,103,117,108,97,114,70,97, -99,116,111,114,0,109,95,108,105,110,101,97,114,70,97,99,116,111,114,0, -109,95,103,114,97,118,105,116,121,0,109,95,103,114,97,118,105,116,121,95, -97,99,99,101,108,101,114,97,116,105,111,110,0,109,95,105,110,118,73,110, -101,114,116,105,97,76,111,99,97,108,0,109,95,116,111,116,97,108,70,111, -114,99,101,0,109,95,116,111,116,97,108,84,111,114,113,117,101,0,109,95, -108,105,110,101,97,114,68,97,109,112,105,110,103,0,109,95,97,110,103,117, -108,97,114,68,97,109,112,105,110,103,0,109,95,97,100,100,105,116,105,111, -110,97,108,68,97,109,112,105,110,103,0,109,95,97,100,100,105,116,105,111, -110,97,108,68,97,109,112,105,110,103,70,97,99,116,111,114,0,109,95,97, -100,100,105,116,105,111,110,97,108,76,105,110,101,97,114,68,97,109,112,105, +65,114,114,97,121,83,105,122,101,0,42,109,95,117,110,115,99,97,108,101, +100,80,111,105,110,116,115,80,116,114,0,109,95,110,117,109,85,110,115,99, +97,108,101,100,80,111,105,110,116,115,0,109,95,119,111,114,108,100,84,114, +97,110,115,102,111,114,109,0,109,95,105,110,116,101,114,112,111,108,97,116, +105,111,110,87,111,114,108,100,84,114,97,110,115,102,111,114,109,0,109,95, +105,110,116,101,114,112,111,108,97,116,105,111,110,76,105,110,101,97,114,86, +101,108,111,99,105,116,121,0,109,95,105,110,116,101,114,112,111,108,97,116, +105,111,110,65,110,103,117,108,97,114,86,101,108,111,99,105,116,121,0,109, +95,97,110,105,115,111,116,114,111,112,105,99,70,114,105,99,116,105,111,110, +0,109,95,104,97,115,65,110,105,115,111,116,114,111,112,105,99,70,114,105, +99,116,105,111,110,0,109,95,99,111,110,116,97,99,116,80,114,111,99,101, +115,115,105,110,103,84,104,114,101,115,104,111,108,100,0,42,109,95,98,114, +111,97,100,112,104,97,115,101,72,97,110,100,108,101,0,42,109,95,99,111, +108,108,105,115,105,111,110,83,104,97,112,101,0,42,109,95,114,111,111,116, +67,111,108,108,105,115,105,111,110,83,104,97,112,101,0,109,95,99,111,108, +108,105,115,105,111,110,70,108,97,103,115,0,109,95,105,115,108,97,110,100, +84,97,103,49,0,109,95,99,111,109,112,97,110,105,111,110,73,100,0,109, +95,97,99,116,105,118,97,116,105,111,110,83,116,97,116,101,49,0,109,95, +100,101,97,99,116,105,118,97,116,105,111,110,84,105,109,101,0,109,95,102, +114,105,99,116,105,111,110,0,109,95,114,101,115,116,105,116,117,116,105,111, +110,0,109,95,105,110,116,101,114,110,97,108,84,121,112,101,0,42,109,95, +117,115,101,114,79,98,106,101,99,116,80,111,105,110,116,101,114,0,109,95, +104,105,116,70,114,97,99,116,105,111,110,0,109,95,99,99,100,83,119,101, +112,116,83,112,104,101,114,101,82,97,100,105,117,115,0,109,95,99,99,100, +77,111,116,105,111,110,84,104,114,101,115,104,111,108,100,0,109,95,99,104, +101,99,107,67,111,108,108,105,100,101,87,105,116,104,0,109,95,99,111,108, +108,105,115,105,111,110,79,98,106,101,99,116,68,97,116,97,0,109,95,105, +110,118,73,110,101,114,116,105,97,84,101,110,115,111,114,87,111,114,108,100, +0,109,95,108,105,110,101,97,114,86,101,108,111,99,105,116,121,0,109,95, +97,110,103,117,108,97,114,86,101,108,111,99,105,116,121,0,109,95,105,110, +118,101,114,115,101,77,97,115,115,0,109,95,97,110,103,117,108,97,114,70, +97,99,116,111,114,0,109,95,108,105,110,101,97,114,70,97,99,116,111,114, +0,109,95,103,114,97,118,105,116,121,0,109,95,103,114,97,118,105,116,121, +95,97,99,99,101,108,101,114,97,116,105,111,110,0,109,95,105,110,118,73, +110,101,114,116,105,97,76,111,99,97,108,0,109,95,116,111,116,97,108,70, +111,114,99,101,0,109,95,116,111,116,97,108,84,111,114,113,117,101,0,109, +95,108,105,110,101,97,114,68,97,109,112,105,110,103,0,109,95,97,110,103, +117,108,97,114,68,97,109,112,105,110,103,0,109,95,97,100,100,105,116,105, +111,110,97,108,68,97,109,112,105,110,103,0,109,95,97,100,100,105,116,105, +111,110,97,108,68,97,109,112,105,110,103,70,97,99,116,111,114,0,109,95, +97,100,100,105,116,105,111,110,97,108,76,105,110,101,97,114,68,97,109,112, +105,110,103,84,104,114,101,115,104,111,108,100,83,113,114,0,109,95,97,100, +100,105,116,105,111,110,97,108,65,110,103,117,108,97,114,68,97,109,112,105, 110,103,84,104,114,101,115,104,111,108,100,83,113,114,0,109,95,97,100,100, 105,116,105,111,110,97,108,65,110,103,117,108,97,114,68,97,109,112,105,110, -103,84,104,114,101,115,104,111,108,100,83,113,114,0,109,95,97,100,100,105, -116,105,111,110,97,108,65,110,103,117,108,97,114,68,97,109,112,105,110,103, -70,97,99,116,111,114,0,109,95,108,105,110,101,97,114,83,108,101,101,112, -105,110,103,84,104,114,101,115,104,111,108,100,0,109,95,97,110,103,117,108, -97,114,83,108,101,101,112,105,110,103,84,104,114,101,115,104,111,108,100,0, -84,89,80,69,23,0,0,0,99,104,97,114,0,117,99,104,97,114,0,115, -104,111,114,116,0,117,115,104,111,114,116,0,105,110,116,0,108,111,110,103, -0,117,108,111,110,103,0,102,108,111,97,116,0,100,111,117,98,108,101,0, -118,111,105,100,0,98,116,83,99,97,108,97,114,0,80,111,105,110,116,101, -114,65,114,114,97,121,0,98,116,80,104,121,115,105,99,115,83,121,115,116, -101,109,0,76,105,115,116,66,97,115,101,0,98,116,86,101,99,116,111,114, -51,68,97,116,97,0,98,116,77,97,116,114,105,120,51,120,51,68,97,116, -97,0,98,116,84,114,97,110,115,102,111,114,109,68,97,116,97,0,98,116, -67,111,108,108,105,115,105,111,110,83,104,97,112,101,68,97,116,97,0,98, -116,67,111,110,118,101,120,73,110,116,101,114,110,97,108,83,104,97,112,101, -68,97,116,97,0,98,116,80,111,115,105,116,105,111,110,65,110,100,82,97, -100,105,117,115,0,98,116,77,117,108,116,105,83,112,104,101,114,101,83,104, -97,112,101,68,97,116,97,0,98,116,67,111,108,108,105,115,105,111,110,79, -98,106,101,99,116,68,97,116,97,0,98,116,82,105,103,105,100,66,111,100, -121,68,97,116,97,0,0,0,84,76,69,78,1,0,1,0,2,0,2,0, -4,0,4,0,4,0,4,0,8,0,0,0,4,0,12,0,36,0,8,0, -16,0,48,0,64,0,12,0,52,0,20,0,64,0,-8,0,-32,1,0,0, -83,84,82,67,12,0,0,0,11,0,3,0,4,0,0,0,4,0,1,0, -9,0,2,0,12,0,3,0,11,0,3,0,11,0,4,0,11,0,5,0, -13,0,2,0,9,0,6,0,9,0,7,0,14,0,1,0,10,0,8,0, -15,0,1,0,14,0,9,0,16,0,2,0,15,0,10,0,14,0,11,0, -17,0,3,0,9,0,12,0,4,0,13,0,0,0,14,0,18,0,5,0, -17,0,15,0,14,0,16,0,14,0,17,0,10,0,18,0,0,0,14,0, -19,0,2,0,14,0,19,0,10,0,20,0,20,0,4,0,18,0,21,0, -19,0,22,0,4,0,23,0,0,0,14,0,21,0,23,0,16,0,24,0, -16,0,25,0,14,0,26,0,14,0,27,0,14,0,28,0,4,0,29,0, -10,0,30,0,9,0,31,0,9,0,32,0,17,0,33,0,4,0,34,0, -4,0,35,0,4,0,36,0,4,0,37,0,10,0,38,0,10,0,39,0, -10,0,40,0,4,0,41,0,9,0,42,0,10,0,43,0,10,0,44,0, -10,0,45,0,4,0,46,0,22,0,21,0,21,0,47,0,15,0,48,0, -14,0,49,0,14,0,50,0,10,0,51,0,14,0,52,0,14,0,53,0, -14,0,54,0,14,0,55,0,14,0,56,0,14,0,57,0,14,0,58,0, -10,0,59,0,10,0,60,0,4,0,61,0,10,0,62,0,10,0,63,0, -10,0,64,0,10,0,65,0,10,0,66,0,10,0,67,0,}; +103,70,97,99,116,111,114,0,109,95,108,105,110,101,97,114,83,108,101,101, +112,105,110,103,84,104,114,101,115,104,111,108,100,0,109,95,97,110,103,117, +108,97,114,83,108,101,101,112,105,110,103,84,104,114,101,115,104,111,108,100, +0,0,0,0,84,89,80,69,24,0,0,0,99,104,97,114,0,117,99,104, +97,114,0,115,104,111,114,116,0,117,115,104,111,114,116,0,105,110,116,0, +108,111,110,103,0,117,108,111,110,103,0,102,108,111,97,116,0,100,111,117, +98,108,101,0,118,111,105,100,0,98,116,83,99,97,108,97,114,0,80,111, +105,110,116,101,114,65,114,114,97,121,0,98,116,80,104,121,115,105,99,115, +83,121,115,116,101,109,0,76,105,115,116,66,97,115,101,0,98,116,86,101, +99,116,111,114,51,68,97,116,97,0,98,116,77,97,116,114,105,120,51,120, +51,68,97,116,97,0,98,116,84,114,97,110,115,102,111,114,109,68,97,116, +97,0,98,116,67,111,108,108,105,115,105,111,110,83,104,97,112,101,68,97, +116,97,0,98,116,67,111,110,118,101,120,73,110,116,101,114,110,97,108,83, +104,97,112,101,68,97,116,97,0,98,116,80,111,115,105,116,105,111,110,65, +110,100,82,97,100,105,117,115,0,98,116,77,117,108,116,105,83,112,104,101, +114,101,83,104,97,112,101,68,97,116,97,0,98,116,67,111,110,118,101,120, +72,117,108,108,83,104,97,112,101,68,97,116,97,0,98,116,67,111,108,108, +105,115,105,111,110,79,98,106,101,99,116,68,97,116,97,0,98,116,82,105, +103,105,100,66,111,100,121,68,97,116,97,0,84,76,69,78,1,0,1,0, +2,0,2,0,4,0,4,0,4,0,4,0,8,0,0,0,4,0,12,0, +36,0,8,0,16,0,48,0,64,0,12,0,52,0,20,0,64,0,64,0, +-8,0,-32,1,83,84,82,67,13,0,0,0,11,0,3,0,4,0,0,0, +4,0,1,0,9,0,2,0,12,0,3,0,11,0,3,0,11,0,4,0, +11,0,5,0,13,0,2,0,9,0,6,0,9,0,7,0,14,0,1,0, +10,0,8,0,15,0,1,0,14,0,9,0,16,0,2,0,15,0,10,0, +14,0,11,0,17,0,3,0,9,0,12,0,4,0,13,0,0,0,14,0, +18,0,5,0,17,0,15,0,14,0,16,0,14,0,17,0,10,0,18,0, +0,0,14,0,19,0,2,0,14,0,19,0,10,0,20,0,20,0,4,0, +18,0,21,0,19,0,22,0,4,0,23,0,0,0,14,0,21,0,4,0, +18,0,21,0,14,0,24,0,4,0,25,0,0,0,14,0,22,0,23,0, +16,0,26,0,16,0,27,0,14,0,28,0,14,0,29,0,14,0,30,0, +4,0,31,0,10,0,32,0,9,0,33,0,9,0,34,0,17,0,35,0, +4,0,36,0,4,0,37,0,4,0,38,0,4,0,39,0,10,0,40,0, +10,0,41,0,10,0,42,0,4,0,43,0,9,0,44,0,10,0,45,0, +10,0,46,0,10,0,47,0,4,0,48,0,23,0,21,0,22,0,49,0, +15,0,50,0,14,0,51,0,14,0,52,0,10,0,53,0,14,0,54,0, +14,0,55,0,14,0,56,0,14,0,57,0,14,0,58,0,14,0,59,0, +14,0,60,0,10,0,61,0,10,0,62,0,4,0,63,0,10,0,64,0, +10,0,65,0,10,0,66,0,10,0,67,0,10,0,68,0,10,0,69,0, +}; int sBulletDNAlen= sizeof(sBulletDNAstr);