problem about quake3 map

Post your questions, suggestions and experiences regarding game design, integration of external libraries here. For irrEdit, irrXML and irrKlang, see the
ambiera forums
Post Reply
klikli234
Posts: 97
Joined: Tue Sep 07, 2010 10:52 am

problem about quake3 map

Post by klikli234 »

how can I find Special position and get their data in quake3 map?
like Vertical stair,portal,Jumping machine.
I can only get position of birth in 16 example.

quote example 16
/*
so we need a good starting Position in the level.
we can ask the Quake3 Loader for all entities with class_name
"info_player_deathmatch"
we choose a random launch
*/
if ( mesh )
{
quake3::tQ3EntityList &entityList = mesh->getEntityList();

quake3::IEntity search;
search.name = "info_player_deathmatch";

s32 index = entityList.binary_search(search);
if (index >= 0)
{
s32 notEndList;
do
{
const quake3::SVarGroup *group = entityList[index].getGroup(1);

u32 parsepos = 0;
const core::vector3df pos =
quake3::getAsVector3df(group->get("origin"), parsepos);

parsepos = 0;
const f32 angle = quake3::getAsFloat(group->get("angle"), parsepos);

core::vector3df target(0.f, 0.f, 1.f);
target.rotateXZBy(angle);

camera->setPosition(pos);
camera->setTarget(pos + target);

++index;
/*
notEndList = ( index < (s32) entityList.size () &&
entityList[index].name == search.name &&
(device->getTimer()->getRealTime() >> 3 ) & 1
);
*/
notEndList = index == 2;
} while ( notEndList );
}
}
here if I met vertical stair,how I can extracted useful information from the level?

and my pk3 map has skybox,but can't display

this is my code

Code: Select all

...
int main()
{
...
Q3LevelLoadParameter loadParam;

	loadParam.defaultLightMapMaterial = EMT_LIGHTMAP;
	loadParam.defaultModulate = EMFN_MODULATE_1X;
	loadParam.defaultFilter = EMF_ANISOTROPIC_FILTER;
	loadParam.verbose = 2;
	loadParam.mergeShaderBuffer = 1;		// merge meshbuffers with same material
	loadParam.cleanUnResolvedMeshes = 1;	// should unresolved meshes be cleaned. otherwise blue texture
	loadParam.loadAllShaders = 1;			// load all scripts in the script directory
	loadParam.loadSkyShader = 0;			// load sky Shader
	loadParam.alpharef = 1;




	device->getFileSystem()->addFileArchive("mesh/sokar3dm5.pk3",true,false,EFAT_ZIP);

	smgr->getParameters()->setAttribute(scene::ALLOW_ZWRITE_ON_TRANSPARENT, true);

	IFileSystem *fs = device->getFileSystem();

	IReadFile* file = fs->createMemoryReadFile(&loadParam,sizeof(loadParam),L"levelparameter.cfg",false);
	
	smgr->getMesh(file);
	file->drop ();

	scene::IQ3LevelMesh* mesh = (scene::IQ3LevelMesh*) smgr->getMesh("maps/sokar3dm5.bsp");

	scene::ISceneNode* node = 0;
	scene::ISceneNode* ShaderParent = 0;
	scene::IMesh * geometry;

	if (mesh)
	{
		geometry = mesh->getMesh(quake3::E_Q3_MESH_GEOMETRY);
		node = smgr->addOctreeSceneNode(geometry, 0, -1, 2048);
		node->setName("maps/sokar3dm5.bsp");
	}

	ShaderParent = smgr->addEmptySceneNode();
	if ( ShaderParent )
		ShaderParent->setName("Shader Container");

	Meta = 0;
	ITriangleSelector* selector = 0;
	Meta = smgr->createMetaTriangleSelector();

	if(Meta)
	{
		selector = smgr->createOctreeTriangleSelector(geometry,node,2048);
		Meta->addTriangleSelector(selector);
		selector->drop();
	}

	IMeshSceneNode* node2;
	if (mesh)
	{
		SMesh * additional_mesh = (SMesh*)mesh->getMesh(quake3::E_Q3_MESH_ITEMS);

		s32 sceneNodeID = 0;
		for ( u32 i = 0; i!= additional_mesh->getMeshBufferCount(); ++i )
		{
			IMeshBuffer* meshBuffer = additional_mesh->getMeshBuffer(i);
			const video::SMaterial& material = meshBuffer->getMaterial();

			s32 shaderIndex = (s32) material.MaterialTypeParam2;

			quake3::IShader *shader = (IShader*)mesh->getShader(shaderIndex);
			if (0 == shader)
			{
				continue;
			}

			node2 = smgr->addQuake3SceneNode(meshBuffer,shader,ShaderParent,sceneNodeID);
			node2->setAutomaticCulling ( scene::EAC_FRUSTUM_BOX );
			sceneNodeID += 1;

		
			u8 doCreate = Meta != 0;

			if(shader)
			{
				const SVarGroup* group = shader->getGroup(1);
				if(group->isDefined("surfaceparm","trans"))
				{
					if(!group->isDefined("surfaceparm","metalsteps"))
					{
						doCreate = 0;
					}
				}
			}
			if( doCreate )
			{
				IMesh *m = 0;
				bool takeOriginal = true;

				if(takeOriginal)
				{
					m = new SMesh();
					((SMesh*)m)->addMeshBuffer(meshBuffer);
				}
				else
				{
					m = node2->getMesh();
				}
				selector = smgr->createTriangleSelector(m,0);
				Meta->addTriangleSelector(selector);
				selector->drop();

				if(takeOriginal)
				{
					delete m;			
				}
			}
		}

	}
...
return 0;
}
BraX
Posts: 36
Joined: Fri Jul 16, 2010 4:39 pm

Post by BraX »

Change:

Code: Select all

loadParam.loadSkyShader = 0;         // load sky Shader 
TO:

Code: Select all

loadParam.loadSkyShader = 1;         // load sky Shader 
Post Reply