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
|