# SETech scene-entity schema for JSON generation # Emit each entity as: { "type": "", "members": { ... } } # Scalars ( float / int / bool / enum ) are JSON STRINGS, e.g. "1.5", "true", "Point". # Nested types ( colors, vectors, transforms ) are { "type":..., "members": {...} } objects. # Text after // is an explanatory comment, not part of the JSON. # 'script API' lines list the methods AngelScript behaviors can call on that type's # handles; every listed reflected member is also a direct script property ( owner.m_Xxx ). ### SEParticleSceneEntity { "type": "SEParticleSceneEntity", "members": { "m_SimColliderShape": one of: "None" | "Box" | "Sphere" // feed this entity's world bounds to the sim world as an analytic collider ( Box = world AABB, Sphere = center + max half extent ) "m_SimColliderBoundsScale": "{ , , }" // per-axis scale applied to the entity bounds used for analytic simulation contact "m_bFrustumCullable": "true" // camera passes skip this entity when its bound box is outside the view frustum "m_strEntityName": "" // lookup id for world queries ( FindEntityByName ) "m_strScriptFile": "" // external .as script file with the behavior class "m_strScriptClass": "" // behavior class name inside the script file "m_strScriptSource": "" // inline AngelScript source, compiled directly ( takes precedence over Script File ) "m_bScriptEnabled": "true" // a disabled script keeps its state but is not ticked "m_strSystemName": "" // Path of the cooked particle system "m_aEmitters": [ { "type": "SEParticleEmitter", "members": { "m_strName": "" "m_uiCapacity": "" "m_fDuration": "" "m_bLooping": "true" "m_iRandomSeed": "" "m_bDepthSort": "true" "m_bDynamicBounds": "true" "m_iLightCount": "" "m_fLightRadius": "" "m_fLightIntensity": "" "m_fSpawnRate": "" "m_aBursts": [ { "type": "SEParticleBurst", "members": { ... } }, ... ] "m_iDeathEventSource": "" "m_iDeathEventSpawnCount": "" "m_fDeathEventInheritVelocity": "" "m_Shape": { "type": "SEParticleShape", "members": { ... } } "m_fShapeSpeed": "" "m_fShapeSpeedVariation": "" "m_vVelocity": "{ , , }" "m_vVelocityVariation": "{ , , }" "m_vAcceleration": "{ , , }" "m_fDrag": "" "m_bDepthCollision": "true" "m_fCollisionBounce": "" "m_fCollisionFriction": "" "m_fCollisionRadius": "" "m_fLifetimeMin": "" "m_fLifetimeMax": "" "m_fSizeMin": "" "m_fSizeMax": "" "m_fSizeRate": "" "m_fSizeRateVariation": "" "m_fRotation": "" "m_fRotationVariation": "" "m_fRotationRate": "" "m_fRotationRateVariation": "" "m_InitialColor": "{ , , , }" "m_vColorVariation": "{ , , }" "m_vColorRate": "{ , , }" "m_vColorRateVariation": "{ , , }" "m_bSizeOverLife": "true" "m_SizeOverLife": { "type": "SEParticleCurve", "members": { ... } } "m_bColorOverLife": "true" "m_ColorOverLife": { "type": "SEParticleColorGradient", "members": { ... } } "m_Renderer": { "type": "SEParticleSpriteRenderer", "members": { ... } } "m_RendererType": one of: "eSEParticleRendererType::Sprite" | "eSEParticleRendererType::Mesh" | "eSEParticleRendererType::Ribbon" "m_MeshRenderer": { "type": "SEParticleMeshRenderer", "members": { ... } } } }, ... ] // per-entity emitter data initialized from the cooked system "m_iInstanceSeed": "" // 0 = unique per instance "m_bLocalSpace": "true" // when off, spawned particles remain in world space as the entity moves "m_fScaleStartDistance": "" // spawn output fades from here ( camera distance ) "m_fScaleEndDistance": "" // no spawning beyond this distance; 0 = always full "m_bEmitEnabled": "true" // gate spawning; false lets live particles finish then goes dark ( scriptable ) } } // script API ( callable on a SEParticleSceneEntity@ handle in AngelScript; reflected members are direct properties ): // void SetPosition(SEVec3) - Set Entity position // void SetScale(SEVec3) - Set Entity scale // void SetRotation(SEVec3, float) - Set Entity orientation ( axis, angle in degrees ) // SEVec3 GetPosition() - Get entity position ### SESimChainSceneEntity { "type": "SESimChainSceneEntity", "members": { "m_SimColliderShape": one of: "None" | "Box" | "Sphere" // feed this entity's world bounds to the sim world as an analytic collider ( Box = world AABB, Sphere = center + max half extent ) "m_SimColliderBoundsScale": "{ , , }" // per-axis scale applied to the entity bounds used for analytic simulation contact "m_bFrustumCullable": "true" // camera passes skip this entity when its bound box is outside the view frustum "m_strEntityName": "" // lookup id for world queries ( FindEntityByName ) "m_strScriptFile": "" // external .as script file with the behavior class "m_strScriptClass": "" // behavior class name inside the script file "m_strScriptSource": "" // inline AngelScript source, compiled directly ( takes precedence over Script File ) "m_bScriptEnabled": "true" // a disabled script keeps its state but is not ticked "m_Chain": { "type": "SESimChainDescriptor", "members": { "m_Material": { "type": "SESimMaterial", "members": { ... } } "m_bOGCContact": "true" "m_uiNodeCount": "" "m_fSpacing": "" "m_Start": "{ , , }" "m_Direction": "{ , , }" "m_fMassPerNode": "" "m_bAttachStart": "true" "m_bAttachEnd": "true" } } // Chain / rope description compiled into the sim solver "m_Color": "{ , , , }" // Line and node-marker color [rgb color 0..1] "m_fThickness": "" // Line thickness in pixels [range 1..64] } } // script API ( callable on a SESimChainSceneEntity@ handle in AngelScript; reflected members are direct properties ): // void SetPosition(SEVec3) - Set Entity position // void SetScale(SEVec3) - Set Entity scale // void SetRotation(SEVec3, float) - Set Entity orientation ( axis, angle in degrees ) // SEVec3 GetPosition() - Get entity position ### SESimHairSceneEntity { "type": "SESimHairSceneEntity", "members": { "m_SimColliderShape": one of: "None" | "Box" | "Sphere" // feed this entity's world bounds to the sim world as an analytic collider ( Box = world AABB, Sphere = center + max half extent ) "m_SimColliderBoundsScale": "{ , , }" // per-axis scale applied to the entity bounds used for analytic simulation contact "m_bFrustumCullable": "true" // camera passes skip this entity when its bound box is outside the view frustum "m_strEntityName": "" // lookup id for world queries ( FindEntityByName ) "m_strScriptFile": "" // external .as script file with the behavior class "m_strScriptClass": "" // behavior class name inside the script file "m_strScriptSource": "" // inline AngelScript source, compiled directly ( takes precedence over Script File ) "m_bScriptEnabled": "true" // a disabled script keeps its state but is not ticked "m_Hair": { "type": "SESimHairDescriptor", "members": { "m_Material": { "type": "SESimMaterial", "members": { ... } } "m_bOGCContact": "true" "m_uiStrandCount": "" "m_uiNodesPerStrand": "" "m_fSegmentLength": "" "m_ScalpCenter": "{ , , }" "m_fScalpRadius": "" "m_fCapAngleDegrees": "" "m_fMassPerNode": "" "m_fBendCompliance": "" "m_bSelfContact": "true" } } // Hair description compiled into the sim solver "m_Color": "{ , , , }" // Strand line color [rgb color 0..1] "m_fThickness": "" // Line thickness in pixels [range 1..64] } } // script API ( callable on a SESimHairSceneEntity@ handle in AngelScript; reflected members are direct properties ): // void SetPosition(SEVec3) - Set Entity position // void SetScale(SEVec3) - Set Entity scale // void SetRotation(SEVec3, float) - Set Entity orientation ( axis, angle in degrees ) // SEVec3 GetPosition() - Get entity position ### SESimClothSceneEntity { "type": "SESimClothSceneEntity", "members": { "m_SimColliderShape": one of: "None" | "Box" | "Sphere" // feed this entity's world bounds to the sim world as an analytic collider ( Box = world AABB, Sphere = center + max half extent ) "m_SimColliderBoundsScale": "{ , , }" // per-axis scale applied to the entity bounds used for analytic simulation contact "m_bFrustumCullable": "true" // camera passes skip this entity when its bound box is outside the view frustum "m_strEntityName": "" // lookup id for world queries ( FindEntityByName ) "m_strScriptFile": "" // external .as script file with the behavior class "m_strScriptClass": "" // behavior class name inside the script file "m_strScriptSource": "" // inline AngelScript source, compiled directly ( takes precedence over Script File ) "m_bScriptEnabled": "true" // a disabled script keeps its state but is not ticked "m_AlbedoTexture": "" // Cooked PBR base-colour texture "m_NormalTexture": "" // Cooked PBR tangent-space normal texture "m_MetallicRoughnessTexture": "" // Cooked glTF-channel MR texture "m_fMetallic": "" // Metallic scalar multiplied with the MR texture "m_fRoughness": "" // Roughness scalar multiplied with the MR texture "m_fNormalIntensity": "" // Normal-map strength "m_bDoubleSided": "true" // Render both fabric faces in every mesh pass "m_bCastsShadows": "true" // Submit the simulated surface to shadow passes "m_Cloth": { "type": "SESimClothDescriptor", "members": { "m_Material": { "type": "SESimMaterial", "members": { ... } } "m_bOGCContact": "true" "m_uiGridWidth": "" "m_uiGridHeight": "" "m_fSpacing": "" "m_Start": "{ , , }" "m_Right": "{ , , }" "m_Down": "{ , , }" "m_fMassPerNode": "" "m_fBendCompliance": "" "m_fWindScale": "" "m_fTopWidthScale": "" "m_fBottomWidthScale": "" "m_bPinTopEdge": "true" "m_bPinTopCorners": "true" "m_bPinLeftEdge": "true" } } // Grid cloth description compiled into the sim solver "m_Color": "{ , , , }" // Two-sided lit cloth color [rgb color 0..1] "m_strAnchorEntityName": "" // Optional animated model entity that owns this cloth mount "m_strAnchorLeftNodeName": "" // Animated node at the left end of the pinned seam "m_strAnchorRightNodeName": "" // Animated node at the right end of the pinned seam "m_strAnchorReferenceNodeName": "" // Animated torso node below the seam used to derive up and back "m_fAnchorBackOffset": "" // Distance behind the animated seam before applying local cloth coordinates } } // script API ( callable on a SESimClothSceneEntity@ handle in AngelScript; reflected members are direct properties ): // void SetPosition(SEVec3) - Set Entity position // void SetScale(SEVec3) - Set Entity scale // void SetRotation(SEVec3, float) - Set Entity orientation ( axis, angle in degrees ) // SEVec3 GetPosition() - Get entity position ### SESimSoftBodySceneEntity { "type": "SESimSoftBodySceneEntity", "members": { "m_SimColliderShape": one of: "None" | "Box" | "Sphere" // feed this entity's world bounds to the sim world as an analytic collider ( Box = world AABB, Sphere = center + max half extent ) "m_SimColliderBoundsScale": "{ , , }" // per-axis scale applied to the entity bounds used for analytic simulation contact "m_bFrustumCullable": "true" // camera passes skip this entity when its bound box is outside the view frustum "m_strEntityName": "" // lookup id for world queries ( FindEntityByName ) "m_strScriptFile": "" // external .as script file with the behavior class "m_strScriptClass": "" // behavior class name inside the script file "m_strScriptSource": "" // inline AngelScript source, compiled directly ( takes precedence over Script File ) "m_bScriptEnabled": "true" // a disabled script keeps its state but is not ticked "m_AlbedoTexture": "" // Cooked PBR base-colour texture "m_NormalTexture": "" // Cooked PBR tangent-space normal texture "m_MetallicRoughnessTexture": "" // Cooked glTF-channel MR texture "m_fMetallic": "" // Metallic scalar multiplied with the MR texture "m_fRoughness": "" // Roughness scalar multiplied with the MR texture "m_fNormalIntensity": "" // Normal-map strength "m_bDoubleSided": "true" // Render both fabric faces in every mesh pass "m_bCastsShadows": "true" // Submit the simulated surface to shadow passes "m_Body": { "type": "SESimSoftBodyDescriptor", "members": { "m_Material": { "type": "SESimMaterial", "members": { ... } } "m_bOGCContact": "true" "m_uiCountX": "" "m_uiCountY": "" "m_uiCountZ": "" "m_fSpacing": "" "m_Start": "{ , , }" "m_fMassPerNode": "" "m_fVolumeCompliance": "" } } // Tetrahedral soft body compiled into the sim solver "m_Color": "{ , , , }" // Two-sided lit jelly color [rgb color 0..1] } } // script API ( callable on a SESimSoftBodySceneEntity@ handle in AngelScript; reflected members are direct properties ): // void SetPosition(SEVec3) - Set Entity position // void SetScale(SEVec3) - Set Entity scale // void SetRotation(SEVec3, float) - Set Entity orientation ( axis, angle in degrees ) // SEVec3 GetPosition() - Get entity position ### SESimFluidSceneEntity { "type": "SESimFluidSceneEntity", "members": { "m_SimColliderShape": one of: "None" | "Box" | "Sphere" // feed this entity's world bounds to the sim world as an analytic collider ( Box = world AABB, Sphere = center + max half extent ) "m_SimColliderBoundsScale": "{ , , }" // per-axis scale applied to the entity bounds used for analytic simulation contact "m_bFrustumCullable": "true" // camera passes skip this entity when its bound box is outside the view frustum "m_strEntityName": "" // lookup id for world queries ( FindEntityByName ) "m_strScriptFile": "" // external .as script file with the behavior class "m_strScriptClass": "" // behavior class name inside the script file "m_strScriptSource": "" // inline AngelScript source, compiled directly ( takes precedence over Script File ) "m_bScriptEnabled": "true" // a disabled script keeps its state but is not ticked "m_Fluid": { "type": "SESimFluidDescriptor", "members": { "m_Material": { "type": "SESimMaterial", "members": { ... } } "m_bOGCContact": "true" "m_uiCountX": "" "m_uiCountY": "" "m_uiCountZ": "" "m_fSpacing": "" "m_Start": "{ , , }" "m_fMassPerNode": "" } } // PBF fluid volume description compiled into the sim solver "m_Color": "{ , , , }" // Fluid point-billboard color [rgb color 0..1] "m_fPointSize": "" // Fluid point billboard size in world units [range 0.01..0.5] } } // script API ( callable on a SESimFluidSceneEntity@ handle in AngelScript; reflected members are direct properties ): // void SetPosition(SEVec3) - Set Entity position // void SetScale(SEVec3) - Set Entity scale // void SetRotation(SEVec3, float) - Set Entity orientation ( axis, angle in degrees ) // SEVec3 GetPosition() - Get entity position ### SEModelSceneEntity { "type": "SEModelSceneEntity", "members": { "m_SimColliderShape": one of: "None" | "Box" | "Sphere" // feed this entity's world bounds to the sim world as an analytic collider ( Box = world AABB, Sphere = center + max half extent ) "m_SimColliderBoundsScale": "{ , , }" // per-axis scale applied to the entity bounds used for analytic simulation contact "m_bFrustumCullable": "true" // camera passes skip this entity when its bound box is outside the view frustum "m_strEntityName": "" // lookup id for world queries ( FindEntityByName ) "m_strScriptFile": "" // external .as script file with the behavior class "m_strScriptClass": "" // behavior class name inside the script file "m_strScriptSource": "" // inline AngelScript source, compiled directly ( takes precedence over Script File ) "m_bScriptEnabled": "true" // a disabled script keeps its state but is not ticked "m_ModelName": "" // ModelName [model path] "m_TintColor": "{ , , , }" // Per-instance diffuse tint multiplied into every material ( white = untinted ) [rgb color 0..1] "m_pPhysicsModel": { "$ref": "" } // PhysicsModel } } // script API ( callable on a SEModelSceneEntity@ handle in AngelScript; reflected members are direct properties ): // void SetPosition(SEVec3) - Set Entity position // void SetScale(SEVec3) - Set Entity scale // void SetRotation(SEVec3, float) - Set Entity orientation ( axis, angle in degrees ) // SEVec3 GetPosition() - Get entity position // void LoadModel(string) - Load a model // bool MountSceneEntity(SESceneEntity@, string, bool) - Mount // bool UnmountSceneEntity(SESceneEntity@) - Unmount a mounted scene entity // float GetPhysicsSpeed() - linear speed of the first rigid body // int FindBodyIndexByNode(string) - resolve-once body index for a named node // void ApplyImpulseToBody(int, SEVec3) - kick a resolved rigid body // void SetNodeLocalYaw(string, float) - kinematically set a non-physics node's local yaw ### SELightEntity { "type": "SELightEntity", "members": { "m_SimColliderShape": one of: "None" | "Box" | "Sphere" // feed this entity's world bounds to the sim world as an analytic collider ( Box = world AABB, Sphere = center + max half extent ) "m_SimColliderBoundsScale": "{ , , }" // per-axis scale applied to the entity bounds used for analytic simulation contact "m_bFrustumCullable": "true" // camera passes skip this entity when its bound box is outside the view frustum "m_strEntityName": "" // lookup id for world queries ( FindEntityByName ) "m_strScriptFile": "" // external .as script file with the behavior class "m_strScriptClass": "" // behavior class name inside the script file "m_strScriptSource": "" // inline AngelScript source, compiled directly ( takes precedence over Script File ) "m_bScriptEnabled": "true" // a disabled script keeps its state but is not ticked "m_LightType": one of: "Directional" | "Point" | "Spot" // Type of light ( directional, point or spot ) "m_Color": "{ , , }" // Light color [rgb color 0..1] "m_Intensity": "" // Light intensity multiplier "m_AnglesDegrees": "{ , }" // Yaw + pitch in degrees ( directional / spot ) "m_Radius": "" // Falloff radius for point and spot lights "m_InnerAngleDegrees": "" // Inner cone angle in degrees ( spot only ) "m_OuterAngleDegrees": "" // Outer cone angle in degrees ( spot only ) "m_bCastsShadow": "true" // Spot light casts shadow when true } } // script API ( callable on a SELightEntity@ handle in AngelScript; reflected members are direct properties ): // void SetPosition(SEVec3) - Set Entity position // void SetScale(SEVec3) - Set Entity scale // void SetRotation(SEVec3, float) - Set Entity orientation ( axis, angle in degrees ) // SEVec3 GetPosition() - Get entity position ### SEProceduralMeshEntity { "type": "SEProceduralMeshEntity", "members": { "m_SimColliderShape": one of: "None" | "Box" | "Sphere" // feed this entity's world bounds to the sim world as an analytic collider ( Box = world AABB, Sphere = center + max half extent ) "m_SimColliderBoundsScale": "{ , , }" // per-axis scale applied to the entity bounds used for analytic simulation contact "m_bFrustumCullable": "true" // camera passes skip this entity when its bound box is outside the view frustum "m_strEntityName": "" // lookup id for world queries ( FindEntityByName ) "m_strScriptFile": "" // external .as script file with the behavior class "m_strScriptClass": "" // behavior class name inside the script file "m_strScriptSource": "" // inline AngelScript source, compiled directly ( takes precedence over Script File ) "m_bScriptEnabled": "true" // a disabled script keeps its state but is not ticked "m_ModelName": "" // ModelName [model path] "m_TintColor": "{ , , , }" // Per-instance diffuse tint multiplied into every material ( white = untinted ) [rgb color 0..1] "m_pPhysicsModel": { "$ref": "" } // PhysicsModel "m_aParts": [ { "type": "SEProceduralShapePart", "members": { "m_ShapeType": one of: "Box" | "Plane" | "Sphere" | "Cylinder" | "Cone" | "Torus" | "Extrude" | "Polygon" "m_Size": "{ , , }" "m_Offset": "{ , , }" "m_RotationAxis": "{ , , }" "m_RotationDegrees": "" "m_Color": "{ , , }" "m_uiRadialSegments": "" "m_uiRings": "" "m_UVScale": "{ , }" "m_UVOffset": "{ , }" "m_bTileWorld": "true" "m_Outline": "" } }, ... ] // Basic shapes composited into one mesh "m_AlbedoTexture": "" // PBR base-color map ( cooked .dds ) [texture path] "m_NormalTexture": "" // PBR tangent-space normal map ( cooked .dds ) [texture path] "m_MetallicRoughnessTexture": "" // PBR MR map ( R=AO G=rough B=metal, cooked .dds ) [texture path] "m_BaseColor": "{ , , }" // Material base color ( multiplies the albedo for the whole mesh ) [rgb color 0..1] "m_Metallic": "" // Metallic factor ( 0 = dielectric ) [range 0..1] "m_Roughness": "" // Roughness factor [range 0..1] "m_bDoubleSided": "true" // Render both faces ( off = back-face cull; on for flat decals ) "m_bAlphaTest": "true" // Cutout: sample the albedo alpha + clip ( wire fences, foliage panels ) } } // script API ( callable on a SEProceduralMeshEntity@ handle in AngelScript; reflected members are direct properties ): // void SetPosition(SEVec3) - Set Entity position // void SetScale(SEVec3) - Set Entity scale // void SetRotation(SEVec3, float) - Set Entity orientation ( axis, angle in degrees ) // SEVec3 GetPosition() - Get entity position // void LoadModel(string) - Load a model // bool MountSceneEntity(SESceneEntity@, string, bool) - Mount // bool UnmountSceneEntity(SESceneEntity@) - Unmount a mounted scene entity // float GetPhysicsSpeed() - linear speed of the first rigid body // int FindBodyIndexByNode(string) - resolve-once body index for a named node // void ApplyImpulseToBody(int, SEVec3) - kick a resolved rigid body // void SetNodeLocalYaw(string, float) - kinematically set a non-physics node's local yaw ### SEWorldTerrainEntity { "type": "SEWorldTerrainEntity", "members": { "m_SimColliderShape": one of: "None" | "Box" | "Sphere" // feed this entity's world bounds to the sim world as an analytic collider ( Box = world AABB, Sphere = center + max half extent ) "m_SimColliderBoundsScale": "{ , , }" // per-axis scale applied to the entity bounds used for analytic simulation contact "m_bFrustumCullable": "true" // camera passes skip this entity when its bound box is outside the view frustum "m_strEntityName": "" // lookup id for world queries ( FindEntityByName ) "m_strScriptFile": "" // external .as script file with the behavior class "m_strScriptClass": "" // behavior class name inside the script file "m_strScriptSource": "" // inline AngelScript source, compiled directly ( takes precedence over Script File ) "m_bScriptEnabled": "true" // a disabled script keeps its state but is not ticked "m_strCoarseHeightmap": "" // Coarse whole-world heightmap ( .shf ) "m_uiLodLevels": "" // Quadtree depth ( 0 = auto ) "m_uiLeafGridDim": "" // Quads per patch side "m_fLeafRange": "" // Leaf LOD range ( 0 = auto ) "m_fLodRangeRatio": "" // Each band x previous "m_fMorphRegion": "" // Morph band fraction } } // script API ( callable on a SEWorldTerrainEntity@ handle in AngelScript; reflected members are direct properties ): // void SetPosition(SEVec3) - Set Entity position // void SetScale(SEVec3) - Set Entity scale // void SetRotation(SEVec3, float) - Set Entity orientation ( axis, angle in degrees ) // SEVec3 GetPosition() - Get entity position ### SESectorTerrainEntity { "type": "SESectorTerrainEntity", "members": { "m_SimColliderShape": one of: "None" | "Box" | "Sphere" // feed this entity's world bounds to the sim world as an analytic collider ( Box = world AABB, Sphere = center + max half extent ) "m_SimColliderBoundsScale": "{ , , }" // per-axis scale applied to the entity bounds used for analytic simulation contact "m_bFrustumCullable": "true" // camera passes skip this entity when its bound box is outside the view frustum "m_strEntityName": "" // lookup id for world queries ( FindEntityByName ) "m_strScriptFile": "" // external .as script file with the behavior class "m_strScriptClass": "" // behavior class name inside the script file "m_strScriptSource": "" // inline AngelScript source, compiled directly ( takes precedence over Script File ) "m_bScriptEnabled": "true" // a disabled script keeps its state but is not ticked "m_strTileName": "" // TileName "m_strMarkers": "" // Markers } } // script API ( callable on a SESectorTerrainEntity@ handle in AngelScript; reflected members are direct properties ): // void SetPosition(SEVec3) - Set Entity position // void SetScale(SEVec3) - Set Entity scale // void SetRotation(SEVec3, float) - Set Entity orientation ( axis, angle in degrees ) // SEVec3 GetPosition() - Get entity position ### SESkyBoxEntity { "type": "SESkyBoxEntity", "members": { "m_SimColliderShape": one of: "None" | "Box" | "Sphere" // feed this entity's world bounds to the sim world as an analytic collider ( Box = world AABB, Sphere = center + max half extent ) "m_SimColliderBoundsScale": "{ , , }" // per-axis scale applied to the entity bounds used for analytic simulation contact "m_bFrustumCullable": "true" // camera passes skip this entity when its bound box is outside the view frustum "m_strEntityName": "" // lookup id for world queries ( FindEntityByName ) "m_strScriptFile": "" // external .as script file with the behavior class "m_strScriptClass": "" // behavior class name inside the script file "m_strScriptSource": "" // inline AngelScript source, compiled directly ( takes precedence over Script File ) "m_bScriptEnabled": "true" // a disabled script keeps its state but is not ticked "m_SkyTextureName": "" // Skybox cubemap texture [texture path] "m_bProceduralSky": "true" // Analytic gradient + sun sky, no cubemap ( zero-download option for web ) "m_SunColor": "{ , , }" // Sun color [rgb color 0..1] "m_SunAngles": "{ , }" // Sun angles ( yaw, pitch ) "m_SunShininessStrength": "{ , }" // Sun shininess and strength } } // script API ( callable on a SESkyBoxEntity@ handle in AngelScript; reflected members are direct properties ): // void SetPosition(SEVec3) - Set Entity position // void SetScale(SEVec3) - Set Entity scale // void SetRotation(SEVec3, float) - Set Entity orientation ( axis, angle in degrees ) // SEVec3 GetPosition() - Get entity position ### SEWaterSurfaceSceneEntity { "type": "SEWaterSurfaceSceneEntity", "members": { "m_SimColliderShape": one of: "None" | "Box" | "Sphere" // feed this entity's world bounds to the sim world as an analytic collider ( Box = world AABB, Sphere = center + max half extent ) "m_SimColliderBoundsScale": "{ , , }" // per-axis scale applied to the entity bounds used for analytic simulation contact "m_bFrustumCullable": "true" // camera passes skip this entity when its bound box is outside the view frustum "m_strEntityName": "" // lookup id for world queries ( FindEntityByName ) "m_strScriptFile": "" // external .as script file with the behavior class "m_strScriptClass": "" // behavior class name inside the script file "m_strScriptSource": "" // inline AngelScript source, compiled directly ( takes precedence over Script File ) "m_bScriptEnabled": "true" // a disabled script keeps its state but is not ticked "m_Parameters": { "type": "SEWaterSurfaceParameters", "members": { "m_fStrength": "" "m_fFalloff": "" "m_fScale": "" "m_fReflRefrStrength": "" "m_fAnimspeed": "" "m_fTimemulti": "" "m_fWaterElevation": "" "m_fProjectorElevation": "" "m_WaterColor": "{ , , }" "m_fSurfaceOpacity": "" "m_fLODbias": "" "m_iOctaves": "" "m_bAsPoints": "true" "m_bDisplayTargets": "true" "m_bDisplace": "true" "m_bDiffuseRefl": "true" "m_bSmooth": "true" "m_bPaused": "true" "m_fAttractorSoftening": "" "m_fAttractorStrength": "" "m_fAttractorFalloffPower": "" "m_fAttractorMaxDepth": "" "m_bGridEnabled": "true" "m_bGridVertical": "true" "m_GridColor": "{ , , }" "m_fGridSpacing": "" "m_fGridThickness": "" "m_fGridOpacity": "" "m_fGridMajorInterval": "" "m_fGridMajorThicknessScale": "" "m_fGridMajorOpacityScale": "" "m_fGridMajorBrightnessScale": "" "m_fGridFadeStart": "" "m_fGridFadeEnd": "" "m_GridBendColor": "{ , , }" "m_fGridBendDepth": "" "m_bPlanarReflectionEnabled": "true" "m_fReflectionResolutionScale": "" "m_fReflectionClipPlaneOffset": "" } } // Water surface simulation parameters } } // script API ( callable on a SEWaterSurfaceSceneEntity@ handle in AngelScript; reflected members are direct properties ): // void SetPosition(SEVec3) - Set Entity position // void SetScale(SEVec3) - Set Entity scale // void SetRotation(SEVec3, float) - Set Entity orientation ( axis, angle in degrees ) // SEVec3 GetPosition() - Get entity position ### SECameraSceneEntity { "type": "SECameraSceneEntity", "members": { "m_SimColliderShape": one of: "None" | "Box" | "Sphere" // feed this entity's world bounds to the sim world as an analytic collider ( Box = world AABB, Sphere = center + max half extent ) "m_SimColliderBoundsScale": "{ , , }" // per-axis scale applied to the entity bounds used for analytic simulation contact "m_bFrustumCullable": "true" // camera passes skip this entity when its bound box is outside the view frustum "m_strEntityName": "" // lookup id for world queries ( FindEntityByName ) "m_strScriptFile": "" // external .as script file with the behavior class "m_strScriptClass": "" // behavior class name inside the script file "m_strScriptSource": "" // inline AngelScript source, compiled directly ( takes precedence over Script File ) "m_bScriptEnabled": "true" // a disabled script keeps its state but is not ticked "m_fFovAngle": "" // vertical field of view, radians [range 0.1..3] "m_fNearClip": "" // near clip plane distance "m_fFarClip": "" // far clip plane distance } } // script API ( callable on a SECameraSceneEntity@ handle in AngelScript; reflected members are direct properties ): // void SetPosition(SEVec3) - Set Entity position // void SetScale(SEVec3) - Set Entity scale // void SetRotation(SEVec3, float) - Set Entity orientation ( axis, angle in degrees ) // SEVec3 GetPosition() - Get entity position ### SECharacterSceneEntity { "type": "SECharacterSceneEntity", "members": { "m_SimColliderShape": one of: "None" | "Box" | "Sphere" // feed this entity's world bounds to the sim world as an analytic collider ( Box = world AABB, Sphere = center + max half extent ) "m_SimColliderBoundsScale": "{ , , }" // per-axis scale applied to the entity bounds used for analytic simulation contact "m_bFrustumCullable": "true" // camera passes skip this entity when its bound box is outside the view frustum "m_strEntityName": "" // lookup id for world queries ( FindEntityByName ) "m_strScriptFile": "" // external .as script file with the behavior class "m_strScriptClass": "" // behavior class name inside the script file "m_strScriptSource": "" // inline AngelScript source, compiled directly ( takes precedence over Script File ) "m_bScriptEnabled": "true" // a disabled script keeps its state but is not ticked "m_ModelName": "" // ModelName [model path] "m_TintColor": "{ , , , }" // Per-instance diffuse tint multiplied into every material ( white = untinted ) [rgb color 0..1] "m_pPhysicsModel": { "$ref": "" } // PhysicsModel "m_Locomotion": { "type": "SECharacterLocomotion", "members": { "m_strIdleClip": "" "m_strWalkClip": "" "m_strRunClip": "" "m_strJumpClip": "" "m_fWalkSpeed": "" "m_fRunSpeed": "" "m_fWalkToRunThreshold": "" "m_fCrossfadeDuration": "" "m_fCapsuleRadius": "" "m_fCapsuleHeight": "" "m_fDensity": "" "m_fMaxAcceleration": "" "m_fJumpSpeed": "" "m_bUseRootMotion": "true" "m_strUpperBodyMaskRoot": "" "m_fArriveRadius": "" "m_fTurnSpeed": "" "m_fModelFacingOffset": "" "m_uiPickupActionId": "" "m_aActions": [ { "type": "SECharacterActionDef", "members": { ... } }, ... ] } } // locomotion configuration + state machine } } // script API ( callable on a SECharacterSceneEntity@ handle in AngelScript; reflected members are direct properties ): // void SetPosition(SEVec3) - Set Entity position // void SetScale(SEVec3) - Set Entity scale // void SetRotation(SEVec3, float) - Set Entity orientation ( axis, angle in degrees ) // SEVec3 GetPosition() - Get entity position // void LoadModel(string) - Load a model // bool MountSceneEntity(SESceneEntity@, string, bool) - Mount // bool UnmountSceneEntity(SESceneEntity@) - Unmount a mounted scene entity // float GetPhysicsSpeed() - linear speed of the first rigid body // int FindBodyIndexByNode(string) - resolve-once body index for a named node // void ApplyImpulseToBody(int, SEVec3) - kick a resolved rigid body // void SetNodeLocalYaw(string, float) - kinematically set a non-physics node's local yaw // void SetTargetPosition(SEVec3) - walk / run toward a world position // void ClearTarget() - stop seeking the current target // void SetMoveInput(float, float) - desired world-space ground velocity ( direct control ) // void SetDesiredSpeed(float) - movement speed used when seeking a target // bool HasArrived() - true once the last target was reached // void TriggerJump() - jump when grounded // bool TriggerAction(int) - play a one-shot action by id; false while busy // bool IsActionInProgress() - true while a one-shot action plays // int GetStateId() - current state ( 0 idle, 1 walk, 2 run, 3 jump, 4 action ) // float GetCurrentSpeed() - current horizontal speed // bool PickUpProp(SESceneEntity@, string) - trigger the pickup action and mount the prop on a node // void DropProp() - unmount the carried prop // int GetPendingEventCount() - animation events fired this frame // int GetPendingEvent(int) - fired animation event id by index ### SEPointsSceneEntity { "type": "SEPointsSceneEntity", "members": { "m_SimColliderShape": one of: "None" | "Box" | "Sphere" // feed this entity's world bounds to the sim world as an analytic collider ( Box = world AABB, Sphere = center + max half extent ) "m_SimColliderBoundsScale": "{ , , }" // per-axis scale applied to the entity bounds used for analytic simulation contact "m_bFrustumCullable": "true" // camera passes skip this entity when its bound box is outside the view frustum "m_strEntityName": "" // lookup id for world queries ( FindEntityByName ) "m_strScriptFile": "" // external .as script file with the behavior class "m_strScriptClass": "" // behavior class name inside the script file "m_strScriptSource": "" // inline AngelScript source, compiled directly ( takes precedence over Script File ) "m_bScriptEnabled": "true" // a disabled script keeps its state but is not ticked "m_aPoints": [ "{ , , }", ... ] // Points to render, in entity space "m_Color": "{ , , , }" // Point color [rgb color 0..1] "m_fPointSize": "" // Point size in pixels [range 1..64] } } // script API ( callable on a SEPointsSceneEntity@ handle in AngelScript; reflected members are direct properties ): // void SetPosition(SEVec3) - Set Entity position // void SetScale(SEVec3) - Set Entity scale // void SetRotation(SEVec3, float) - Set Entity orientation ( axis, angle in degrees ) // SEVec3 GetPosition() - Get entity position ### SELinesSceneEntity { "type": "SELinesSceneEntity", "members": { "m_SimColliderShape": one of: "None" | "Box" | "Sphere" // feed this entity's world bounds to the sim world as an analytic collider ( Box = world AABB, Sphere = center + max half extent ) "m_SimColliderBoundsScale": "{ , , }" // per-axis scale applied to the entity bounds used for analytic simulation contact "m_bFrustumCullable": "true" // camera passes skip this entity when its bound box is outside the view frustum "m_strEntityName": "" // lookup id for world queries ( FindEntityByName ) "m_strScriptFile": "" // external .as script file with the behavior class "m_strScriptClass": "" // behavior class name inside the script file "m_strScriptSource": "" // inline AngelScript source, compiled directly ( takes precedence over Script File ) "m_bScriptEnabled": "true" // a disabled script keeps its state but is not ticked "m_aPoints": [ "{ , , }", ... ] // Consecutive point pairs, each pair is one segment "m_Color": "{ , , , }" // Line color [rgb color 0..1] "m_fThickness": "" // Line thickness in pixels [range 1..64] } } // script API ( callable on a SELinesSceneEntity@ handle in AngelScript; reflected members are direct properties ): // void SetPosition(SEVec3) - Set Entity position // void SetScale(SEVec3) - Set Entity scale // void SetRotation(SEVec3, float) - Set Entity orientation ( axis, angle in degrees ) // SEVec3 GetPosition() - Get entity position ### SETextEntity { "type": "SETextEntity", "members": { "m_SimColliderShape": one of: "None" | "Box" | "Sphere" // feed this entity's world bounds to the sim world as an analytic collider ( Box = world AABB, Sphere = center + max half extent ) "m_SimColliderBoundsScale": "{ , , }" // per-axis scale applied to the entity bounds used for analytic simulation contact "m_bFrustumCullable": "true" // camera passes skip this entity when its bound box is outside the view frustum "m_strEntityName": "" // lookup id for world queries ( FindEntityByName ) "m_strScriptFile": "" // external .as script file with the behavior class "m_strScriptClass": "" // behavior class name inside the script file "m_strScriptSource": "" // inline AngelScript source, compiled directly ( takes precedence over Script File ) "m_bScriptEnabled": "true" // a disabled script keeps its state but is not ticked "m_Text": "" // Text to render "m_Color": "{ , , , }" // Text color [rgb color 0..1] "m_strFontFile": "" // Font face or .ttf path ( bare names resolve under Fonts/; empty = default face ) "m_fScale": "" // Text scale [range 0.01..10] "m_HorizontalAlign": one of: "Left" | "Right" | "Center" // Horizontal alignment around the origin "m_VerticalAlign": one of: "Top" | "Middle" | "Bottom" // Vertical alignment around the origin "m_bBillboarded": "true" // Billboard the text toward the camera "m_bDrawInAlphaPass": "true" // Draw in the alpha pass ( after particles ) so the text stays in front of particle effects } } // script API ( callable on a SETextEntity@ handle in AngelScript; reflected members are direct properties ): // void SetPosition(SEVec3) - Set Entity position // void SetScale(SEVec3) - Set Entity scale // void SetRotation(SEVec3, float) - Set Entity orientation ( axis, angle in degrees ) // SEVec3 GetPosition() - Get entity position ### SESynthSceneEntity { "type": "SESynthSceneEntity", "members": { "m_SimColliderShape": one of: "None" | "Box" | "Sphere" // feed this entity's world bounds to the sim world as an analytic collider ( Box = world AABB, Sphere = center + max half extent ) "m_SimColliderBoundsScale": "{ , , }" // per-axis scale applied to the entity bounds used for analytic simulation contact "m_bFrustumCullable": "true" // camera passes skip this entity when its bound box is outside the view frustum "m_strEntityName": "" // lookup id for world queries ( FindEntityByName ) "m_strScriptFile": "" // external .as script file with the behavior class "m_strScriptClass": "" // behavior class name inside the script file "m_strScriptSource": "" // inline AngelScript source, compiled directly ( takes precedence over Script File ) "m_bScriptEnabled": "true" // a disabled script keeps its state but is not ticked "m_strInstrument": "" // instrument name from the library "m_strSongFile": "" // song XML; generated here when missing "m_bGenerateSong": "true" // compose from the seed when no song loads "m_iSeed": "" // composition seed; same seed, same song "m_fTempoBPM": "" // generated tempo [range 20..300] "m_iBars": "" // generated length in bars [range 1..16] "m_Scale": one of: "eSESynthScale::Major" | "eSESynthScale::NaturalMinor" | "eSESynthScale::Dorian" | "eSESynthScale::Phrygian" | "eSESynthScale::Mixolydian" | "eSESynthScale::PentatonicMinor" // scale the song is built from "m_iRootNote": "" // MIDI root note [range 0..127] "m_bGenerateDrums": "true" // include a drum part "m_bGenerateBass": "true" // include a bass part "m_bGenerateLead": "true" // include a lead part "m_bGeneratePad": "true" // include a pad part "m_bAutoPlay": "true" // start the song on creation "m_fVolume": "" // output level [range 0..1] "m_fPan": "" // 0 left, 0.5 centre, 1 right [range 0..1] } } // script API ( callable on a SESynthSceneEntity@ handle in AngelScript; reflected members are direct properties ): // void SetPosition(SEVec3) - Set Entity position // void SetScale(SEVec3) - Set Entity scale // void SetRotation(SEVec3, float) - Set Entity orientation ( axis, angle in degrees ) // SEVec3 GetPosition() - Get entity position // void NoteOn(int, float) - hold a note until NoteOff; velocity 0..1 // void NoteOff(int) - release a held note // void PlayNote(int, float, float) - one-shot note that releases itself after N seconds // void AllNotesOff() - release everything sounding // int FindInstrument(string) - resolve an instrument name to an index once // void PlayEffect(int, int, float) - fire a sound effect on a resolved instrument index // void PlayEffectNamed(string, int, float) - fire a sound effect by name; resolves every call // bool SetInstrument(string) - change instrument for free notes // void PlaySong() - start the song from the beginning // void StopSong() - stop the song and release its notes // void PauseSong() - stop without losing the position // void ResumeSong() - continue from where Pause stopped // bool IsSongPlaying() - true while the sequencer runs // bool IsSongFinished() - true once a non-looping song has ended // bool LoadSong(string) - load a song XML, replacing the current one // int GetSongPosition() - position in steps // int GetSongLength() - arrangement length in steps // void SeekToStep(int) - jump to a step in the arrangement // int GetTrackCount() - number of tracks in the song // void SetTrackMuted(int, bool) - mute or unmute one track // bool IsTrackMuted(int) - true when a track is muted // int GetVoiceCount() - voices sounding right now // void SetTempo(float) - multiply the authored tempo // float GetTempo() - current tempo multiplier // void SetVolume(float) - set output level // void SetPan(float) - set stereo position // bool IsPlaying() - true while any voice sounds // void Regenerate(int) - recompose from a new seed and restart ### SEGuiEntity { "type": "SEGuiEntity", "members": { "m_SimColliderShape": one of: "None" | "Box" | "Sphere" // feed this entity's world bounds to the sim world as an analytic collider ( Box = world AABB, Sphere = center + max half extent ) "m_SimColliderBoundsScale": "{ , , }" // per-axis scale applied to the entity bounds used for analytic simulation contact "m_bFrustumCullable": "true" // camera passes skip this entity when its bound box is outside the view frustum "m_strEntityName": "" // lookup id for world queries ( FindEntityByName ) "m_strScriptFile": "" // external .as script file with the behavior class "m_strScriptClass": "" // behavior class name inside the script file "m_strScriptSource": "" // inline AngelScript source, compiled directly ( takes precedence over Script File ) "m_bScriptEnabled": "true" // a disabled script keeps its state but is not ticked } } // script API ( callable on a SEGuiEntity@ handle in AngelScript; reflected members are direct properties ): // void SetPosition(SEVec3) - Set Entity position // void SetScale(SEVec3) - Set Entity scale // void SetRotation(SEVec3, float) - Set Entity orientation ( axis, angle in degrees ) // SEVec3 GetPosition() - Get entity position ## Audio: sound effects and music ( SESynthSceneEntity ) # There are no audio assets. Every sound is synthesized at runtime, so a # generated scene can have complete audio without shipping a single file. # # SOUND EFFECTS - add one entity named "Sfx": # { "type": "SESynthSceneEntity", "members": { # "m_strEntityName": "Sfx", "m_bGenerateSong": "False", "m_fVolume": "0.7" } } # Resolve instrument names ONCE in OnInit, then trigger by index - a game # fires effects on every collision and keypress, so the trigger path must # not carry a name: # SESynthSceneEntity@ sfx; int fxZap = -1; # void OnInit() { # @sfx = cast(gWorld.FindEntityByName("Sfx")); # if (sfx !is null) fxZap = sfx.FindInstrument("Zap"); # } # // at the event: if (sfx !is null) sfx.PlayEffect(fxZap, 64, 0.8f); # PlayEffect takes ( instrumentIndex, midiNote, velocity 0..1 ) and needs no # stop call - effect instruments release themselves. Vary the midi note to # make repeated events sound different rather than adding instruments: # pitch by row, by lane, by combo count. # Effect instruments: Beep Laser Zap Explosion Coin Thud Whoosh # Musical instruments: Lead Bass Pad Pluck Bell Harpsichord Flute Strings # Kick Snare Hat # Typical mapping: shoot=Laser, hit/break=Zap, pickup/goal=Coin, jump=Beep, # land/impact=Thud, death=Explosion, dash/strafe=Whoosh. # # MUSIC - add a second entity named "Music" that composes from a seed: # { "type": "SESynthSceneEntity", "members": { # "m_strEntityName": "Music", "m_strSongFile": "Database/Synth/.xml", # "m_bGenerateSong": "True", "m_iSeed": "1234", "m_fTempoBPM": "120", # "m_iBars": "8", "m_Scale": "NaturalMinor", "m_iRootNote": "57", # "m_bAutoPlay": "True", "m_fVolume": "0.5" } } # Leave SongFile EMPTY for a generated soundtrack: the same seed always # yields the same song, so naming a file only writes a copy that then # shadows the seed. Name one only for a hand-authored song. Scales: # Major NaturalMinor # Dorian Phrygian Mixolydian PentatonicMinor. Minor scales and a faster # tempo read as tense or driving; Major and a slower tempo read as calm. # Scripts drive it with PlaySong StopSong PauseSong ResumeSong, and SetTempo # ( a multiplier, so raise it as the game speeds up ). # Set an authored SongFile with GenerateSong False to play a fixed song # instead; a named song file is never overwritten by generation. ## World gameplay properties ( SESceneWorld ) # Set via a top-level "world" key next to "entities" in a command or scene file: # "world": { "members": { "m_strPlayerCameraName": "" } } # Scripts reach the live world through the global gWorld. ### SESceneWorld { "type": "SESceneWorld", "members": { "m_strPlayerCameraName": "" // gameplay property: SECameraSceneEntity to render from while Playing } } // script API ( callable on a SESceneWorld@ handle in AngelScript; reflected members are direct properties ): // void AddEntity(SESceneEntity@) - AddAnEntity // SESceneEntity@ FindEntityByName(string) - find an entity by its object name ( resolve once, not per frame ) // int GetEntitiesCount() - number of entities in the world // SESceneEntity@ GetEntity(int) - entity by index