Leadwerks 3D World Studio Help

Blitz3D Forums/Blitz3D Beginners Area/Leadwerks 3D World Studio Help

UnderwoodNullium(Posted 2008) [#1]
(1)
When I create a level with 3D World Studio, is there a way I can specify where I want moving platforms, where I want enemies etc. Basically, I want to have references to certain objects in 3D World Studio, and once I load my exported mesh into Blitz3D, I want to replace each reference with an actual object (enemy, moving platform...etc.) I think you can do it somehow with 3D World Studio 'entities', but can anyone explain exactly how?

Also, what is a good way to load and export my level with 3D World Studio so that in Blitz3D I can have separate collision types for different parts of the mesh. For example, I want to give the 'wall' collision type to only the walls in my level. My ONLY solution was to create my whole level in 3D World Studio, then delete all the walls, export as FLOOR.b3d, and then reload the full level, and then delete all the floors, leaving only the walls, and export that as WALLS.b3d. And then load both meshes into the same location and give each mesh a different collision value. That would work, right? But, is there an easier way to do this?

Thanks for your help!


Mortiis(Posted 2008) [#2]
1) There is a file named "entities.def" under 3D World Studio folder. Open it with notepad and add custom entites. Like;

@pointclass enemy : "sprites\enemy"
[
	
]


2) Select the brush or mesh you want to and press ALT+Enter or open it's properties window. Change it's name (e.g. Wall_Col) and use the sample code below. (It's my world loading code in one of my projects)

	Function LoadWorld( file$ )
		map=LoadAnimMesh( file )
	
		If Not map Return
		
		world = CreatePivot()
		meshes = CreatePivot( world )
		renderbrushes = CreateMesh( world )
		collisionbrushes = CreatePivot( world )
		pointentities = CreatePivot( world )
		solidentities = CreatePivot( world )
		EntityType collisionbrushes, COLLISIONTYPE_BRUSH
	
		For c = 1 To CountChildren( map )
	
			node = GetChild( map, c )	
			classname$ = Lower( KeyValue ( node, "classname" ) )
			DebugLog "Loading " + Chr( 34 ) + classname + Chr( 34 ) + "..."
			
			Select classname
			
			;===============================================================================
			;Map Geometry
			;===============================================================================
			
				Case "mesh"
					EntityParent node, meshes
					c = c - 1
					EntityType node, COLLISIONTYPE_MESH
					
				Case "terrain"
					EntityType node, COLLISIONTYPE_BRUSH
					EntityParent node, collisionbrushes
					c = c - 1
	
				Case "brush"
					RotateMesh node, EntityPitch( node ), EntityYaw( node ), EntityRoll( node )
					PositionMesh node, EntityX( node ), EntityY( node ), EntityZ( node )
					AddMesh node, renderbrushes
					EntityAlpha node, 0
					EntityType node, COLLISIONTYPE_BRUSH
					EntityAlpha node, 0
					EntityParent node, collisionbrushes
					c = c - 1
			
			;===============================================================================
			;Solid Entities
			;===============================================================================
			
			;Invisible collision brush
				Case "field_hit"
					EntityParent node, collisionbrushes
					EntityType node, COLLISIONTYPE_BRUSH
					EntityAlpha node, 0

					c = c - 1
					
			;Border Brush 1
				Case "border1"
					EntityParent node, collisionbrushes
					EntityType node, COLLISIONTYPE_BRUSH
					EntityAlpha node, 1
					
					EntityBlend node, 3
					
					borderAnimTexture1.tAnimTexture = AnimTextureNew( "..\Media\Model\border.png", node, 256, 0, 15, 1.4 )
					
					c = c - 1
					
			;Border Brush 2
				Case "border2"
					EntityParent node, collisionbrushes
					EntityType node, COLLISIONTYPE_BRUSH
					EntityAlpha node, 1
					
					EntityBlend node, 3
					
					borderAnimTexture2.tAnimTexture = AnimTextureNew( "..\Media\Model\border.png", node, 256, 0, 15, 1.4 )
					
					c = c - 1

			;Border Brush 3
				Case "border3"
					EntityParent node, collisionbrushes
					EntityType node, COLLISIONTYPE_BRUSH
					EntityAlpha node, 1
					
					EntityBlend node, 3
					
					borderAnimTexture3.tAnimTexture = AnimTextureNew( "..\Media\Model\border.png", node, 256, 0, 15, 1.4 )
					
					c = c - 1
					
			;Border Brush 4
				Case "border4"
					EntityParent node, collisionbrushes
					EntityType node, COLLISIONTYPE_BRUSH
					EntityAlpha node, 1
					
					EntityBlend node, 3
					
					borderAnimTexture4.tAnimTexture = AnimTextureNew( "..\Media\Model\border.png", node, 256, 0, 15, 1.4 )
					
					c = c - 1
					
			;Nebula brush
				Case "nebula"
					EntityParent node, collisionbrushes
					EntityBlend node, 3
					EntityFX node, 1
					
					c = c - 1
					
			;===============================================================================
			;Point Entities
			;===============================================================================
			
				Case "playerstart"
					angles$ = KeyValue( node, "angles", "0 0 0" )
					pitch# = Piece( angles, 1, " " )
					yaw# = Piece( angles, 2, " ")
					roll# = Piece( angles, 3, " ")
						
					spawnX = EntityX( node )
					spawnY = EntityY( node )
					spawnZ = EntityZ( node )
					
			;===============================================================================
			;Custom Entities
			;===============================================================================

				Case "planet1" 
				
					scale$ = KeyValue( node, "scale", "0 0 0" )
					scaleX# = Piece( scale, 1, " " )
					scaleY# = Piece( scale, 2, " " )
					scaleZ# = Piece( scale, 3, " " )
				
					Planet.tPlanet = PlanetNew( CreateQuad(), "..\Media\Model\planet1.dds", EntityX(node), EntityY(node), EntityZ(node), scaleX, scaleY, scaleZ, .02 )

				Case "planet2"
				
					scale$ = KeyValue( node, "scale", "0 0 0" )
					scaleX# = Piece( scale, 1, " " )
					scaleY# = Piece( scale, 2, " " )
					scaleZ# = Piece( scale, 3, " " )
				
					Planet.tPlanet = PlanetNew( CreateQuad(), "..\Media\Model\planet2.dds", EntityX(node), EntityY(node), EntityZ(node), scaleX, scaleY, scaleZ, .02 )
					
				Case "planet3"
				
					scale$ = KeyValue( node, "scale", "0 0 0" )
					scaleX# = Piece( scale, 1, " " )
					scaleY# = Piece( scale, 2, " " )
					scaleZ# = Piece( scale, 3, " " )
				
					Planet.tPlanet = PlanetNew( CreateQuad(), "..\Media\Model\planet3.dds", EntityX(node), EntityY(node), EntityZ(node), scaleX, scaleY, scaleZ, .02 )
				
				Case "planet4"
				
					scale$ = KeyValue( node, "scale", "0 0 0" )
					scaleX# = Piece( scale, 1, " " )
					scaleY# = Piece( scale, 2, " " )
					scaleZ# = Piece( scale, 3, " " )
				
					Planet.tPlanet = PlanetNew( CreateQuad(), "..\Media\Model\planet4.dds", EntityX(node), EntityY(node), EntityZ(node), scaleX, scaleY, scaleZ, .02 )
				
				Case "planet5"
				
					scale$ = KeyValue( node, "scale", "0 0 0" )
					scaleX# = Piece( scale, 1, " " )
					scaleY# = Piece( scale, 2, " " )
					scaleZ# = Piece( scale, 3, " " )
				
					Planet.tPlanet = PlanetNew( CreateQuad(), "..\Media\Model\planet5.dds", EntityX(node), EntityY(node), EntityZ(node), scaleX, scaleY, scaleZ, .02 )

				Case "planet6"
				
					scale$ = KeyValue( node, "scale", "0 0 0" )
					scaleX# = Piece( scale, 1, " " )
					scaleY# = Piece( scale, 2, " " )
					scaleZ# = Piece( scale, 3, " " )
				
					Planet.tPlanet = PlanetNew( CreateQuad(), "..\Media\Model\planet6.dds", EntityX(node), EntityY(node), EntityZ(node), scaleX, scaleY, scaleZ, .02 )
		
				Case "planet7"
				
					scale$ = KeyValue( node, "scale", "0 0 0" )
					scaleX# = Piece( scale, 1, " " )
					scaleY# = Piece( scale, 2, " " )
					scaleZ# = Piece( scale, 3, " " )
				
					Planet.tPlanet = PlanetNew( CreateQuad(), "..\Media\Model\planet7.dds", EntityX(node), EntityY(node), EntityZ(node), scaleX, scaleY, scaleZ, .02 )
		
				Case "asteroid1"
				
					scale$ = KeyValue( node, "scale", "0 0 0" )
					scaleX# = Piece( scale, 1, " " )
					scaleY# = Piece( scale, 2, " " )
					scaleZ# = Piece( scale, 3, " " )
				
					Asteroid.tAsteroid = AsteroidNew( CreateQuad(), "..\Media\Model\asteroid1.dds", EntityX(node), EntityY(node), EntityZ(node), scaleX, scaleY, scaleZ, Rnd(-1, 1), .2 )
				
				Case "asteroid2"
				
					scale$ = KeyValue( node, "scale", "0 0 0" )
					scaleX# = Piece( scale, 1, " " )
					scaleY# = Piece( scale, 2, " " )
					scaleZ# = Piece( scale, 3, " " )
				
					Asteroid.tAsteroid = AsteroidNew( CreateQuad(), "..\Media\Model\asteroid2.dds", EntityX(node), EntityY(node), EntityZ(node), scaleX, scaleY, scaleZ, Rnd(-1, 1), .2 )
				
				Case "asteroid3"
				
					scale$ = KeyValue( node, "scale", "0 0 0" )
					scaleX# = Piece( scale, 1, " " )
					scaleY# = Piece( scale, 2, " " )
					scaleZ# = Piece( scale, 3, " " )
				
					Asteroid.tAsteroid = AsteroidNew( CreateQuad(), "..\Media\Model\asteroid3.dds", EntityX(node), EntityY(node), EntityZ(node), scaleX, scaleY, scaleZ, Rnd(-1, 1), .2 )
				
				Case "convoy"

					scale$ = KeyValue( node, "scale", "0 0 0" )
					scaleX# = Piece( scale, 1, " " )
					scaleY# = Piece( scale, 2, " " )
					scaleZ# = Piece( scale, 3, " " )
				
					Convoy.tConvoy = ConvoyNew( CreateQuad(), "..\Media\Model\convoy.dds", EntityX(node), EntityY(node), EntityZ(node), scaleX, scaleY, scaleZ, 1 )
				
				Case "debris"
				
					scale$ = KeyValue( node, "scale", "0 0 0" )
					scaleX# = Piece( scale, 1, " " )
					scaleY# = Piece( scale, 2, " " )
					scaleZ# = Piece( scale, 3, " " )
				
					Debris.tDebris = DebrisNew( LoadMesh( "..\Media\Model\Debris.b3d" ), "..\Media\Model\debristex.dds", EntityX(node), EntityY(node), EntityZ(node), scaleX, scaleY, scaleZ )
				
			;===============================================================================
			;Enemy Entities
			;===============================================================================

				End Select
			Next
	
		FreeEntity map
		Return world
	End Function



UnderwoodNullium(Posted 2008) [#3]
Wow, I can't thank you enough man! This is exactly what I need. But looking at your code I think there are a few functions defined somewhere else, like the 'KeyValue()' and 'Piece()' (paayce!) functions. Could you show me those? Thanks a lot for all your help!


Mortiis(Posted 2008) [#4]
Oh, you don't have the loadworld function.

Download Here;
http://www.leadwerks.com/files/AdvancedSceneLoadingInBlitz3D.zip


UnderwoodNullium(Posted 2008) [#5]
Thanks a lot man, you've been really helpful!


Ben(t)(Posted 2008) [#6]
Im sorta confused on how this loader works. what exactly does it do to the map and would i have to modify the function for my code?


Ben(t)(Posted 2008) [#7]
ahh! this wont work! i used that funtion and then scaled the map to my custom size. but now the collisions wont work!!!


Ben(t)(Posted 2008) [#8]
forget all the posts that i have put on here