# 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 ). ### SEPhysicsSandboxEntity { "type": "SEPhysicsSandboxEntity", "members": { "m_fWaterInteractionRadius": "" // World-space contact sphere radius in metres; zero disables, positive radii have a 0.5 metre minimum [range 0..16] "m_fWaterInteractionStrength": "" // Strength of the contact disturbance [range 0..2] "m_bWaterObstacle": "true" // reflect simulated ripples around the contact footprint "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_uiPyramidBase": "" // boxes per side of the center pyramid's ground layer "m_uiNumTowers": "" // corner box towers ( 0, 1 or 4 ) "m_uiTowerHeight": "" // boxes per tower "m_uiRainSpheres": "" // spheres raining onto the scene at start "m_fBoxHalfExtent": "" // half extent of every stacked box "m_fSphereRadius": "" // radius of the rained / thrown spheres "m_bShowcaseLook": "true" // PBR materials + varied box proportions ( off = simple flat-color scene ) "m_eBackend": one of: "ODE" | "CPU" | "GPU" // ODE, shared-source CPU, or shared-source GPU rigid-body implementation "m_uiSolverIterations": "" // Jacobi solve/apply iterations per step ( 1-32 ) "m_fRelaxation": "" // Jacobi under-relaxation ( raise with fewer iterations ) [range 0.1..1] } } // script API ( callable on a SEPhysicsSandboxEntity@ 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 ShootSphere(float, float) - shoot a sphere from a ring around the arena at the crate field ( angle degrees, speed ) // void DropBoxAt(float, float) - drop a box at ( x, z ) from above the arena ### SEParticleSceneEntity { "type": "SEParticleSceneEntity", "members": { "m_fWaterInteractionRadius": "" // World-space contact sphere radius in metres; zero disables, positive radii have a 0.5 metre minimum [range 0..16] "m_fWaterInteractionStrength": "" // Strength of the contact disturbance [range 0..2] "m_bWaterObstacle": "true" // reflect simulated ripples around the contact footprint "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_fWaterInteractionRadius": "" // World-space contact sphere radius in metres; zero disables, positive radii have a 0.5 metre minimum [range 0..16] "m_fWaterInteractionStrength": "" // Strength of the contact disturbance [range 0..2] "m_bWaterObstacle": "true" // reflect simulated ripples around the contact footprint "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_fWaterInteractionRadius": "" // World-space contact sphere radius in metres; zero disables, positive radii have a 0.5 metre minimum [range 0..16] "m_fWaterInteractionStrength": "" // Strength of the contact disturbance [range 0..2] "m_bWaterObstacle": "true" // reflect simulated ripples around the contact footprint "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_fWaterInteractionRadius": "" // World-space contact sphere radius in metres; zero disables, positive radii have a 0.5 metre minimum [range 0..16] "m_fWaterInteractionStrength": "" // Strength of the contact disturbance [range 0..2] "m_bWaterObstacle": "true" // reflect simulated ripples around the contact footprint "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_fWaterInteractionRadius": "" // World-space contact sphere radius in metres; zero disables, positive radii have a 0.5 metre minimum [range 0..16] "m_fWaterInteractionStrength": "" // Strength of the contact disturbance [range 0..2] "m_bWaterObstacle": "true" // reflect simulated ripples around the contact footprint "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_fWaterInteractionRadius": "" // World-space contact sphere radius in metres; zero disables, positive radii have a 0.5 metre minimum [range 0..16] "m_fWaterInteractionStrength": "" // Strength of the contact disturbance [range 0..2] "m_bWaterObstacle": "true" // reflect simulated ripples around the contact footprint "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_fWaterInteractionRadius": "" // World-space contact sphere radius in metres; zero disables, positive radii have a 0.5 metre minimum [range 0..16] "m_fWaterInteractionStrength": "" // Strength of the contact disturbance [range 0..2] "m_bWaterObstacle": "true" // reflect simulated ripples around the contact footprint "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_fWaterInteractionRadius": "" // World-space contact sphere radius in metres; zero disables, positive radii have a 0.5 metre minimum [range 0..16] "m_fWaterInteractionStrength": "" // Strength of the contact disturbance [range 0..2] "m_bWaterObstacle": "true" // reflect simulated ripples around the contact footprint "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 "m_fShadowNearDistance": "" // Where the spot's shadow frustum starts; raise it past the geometry the light is mounted on ( 0 = range / 100 ) "m_bRimOnly": "true" // Directional only: drive the screen-space contour rim and nothing else "m_fRimPeakPixels": "" // Depth of the rim peak inside the silhouette, in pixels "m_fRimFadePixels": "" // Fade distance past the rim peak, in pixels "m_fRimFacingPower": "" // Exponent on the rim's light-facing mask "m_fRimGrazingMinNdotV": "" // NdotV below which the rim band is at full strength "m_fRimGrazingMaxNdotV": "" // NdotV above which the rim band is gone } } // 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_fWaterInteractionRadius": "" // World-space contact sphere radius in metres; zero disables, positive radii have a 0.5 metre minimum [range 0..16] "m_fWaterInteractionStrength": "" // Strength of the contact disturbance [range 0..2] "m_bWaterObstacle": "true" // reflect simulated ripples around the contact footprint "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": "" "m_uiExtrudeSurfaces": "" "m_bMetricUVs": "true" "m_fTopScale": "" } }, ... ] // 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_AmbientOcclusion": "" // Ambient / environment occlusion ( 1 = open sky ); scales IBL only, never the direct lights [range 0..1] "m_Emissive": "" // Self-illumination multiplier ( > 1 blooms under the ACES tonemap ) [range 0..16] "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 ) "m_bTransparent": "true" // Blend instead of cutout: draws in the alpha pass and writes no depth "m_fOpacity": "" // 0 = invisible, 1 = opaque ( needs Transparent ) [range 0..1] "m_ShadingEffect": "" // Effect the material shades with ( empty = PBR.fx; Facade.fx adds building surface work ) "m_FacadePaneUVSize": "" // Facade.fx only: window bay in UV units ( bay metres / tile metres ); per-pane glazing variation, 0 = off "m_FacadePaneUVSizeV": "" // Facade.fx only: bay height in UV units ( 0 = square ) "m_FacadeInteriorDepth": "" // Facade.fx only: parallax room depth behind glass, in bay widths ( 0 = flat ) "m_FacadeInteriorWarmth": "" // Facade.fx only: 0 = office daylight, 1 = lit shop [range 0..1] } } // 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_fWaterInteractionRadius": "" // World-space contact sphere radius in metres; zero disables, positive radii have a 0.5 metre minimum [range 0..16] "m_fWaterInteractionStrength": "" // Strength of the contact disturbance [range 0..2] "m_bWaterObstacle": "true" // reflect simulated ripples around the contact footprint "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_fWaterInteractionRadius": "" // World-space contact sphere radius in metres; zero disables, positive radii have a 0.5 metre minimum [range 0..16] "m_fWaterInteractionStrength": "" // Strength of the contact disturbance [range 0..2] "m_bWaterObstacle": "true" // reflect simulated ripples around the contact footprint "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_fWaterInteractionRadius": "" // World-space contact sphere radius in metres; zero disables, positive radii have a 0.5 metre minimum [range 0..16] "m_fWaterInteractionStrength": "" // Strength of the contact disturbance [range 0..2] "m_bWaterObstacle": "true" // reflect simulated ripples around the contact footprint "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_SkyType": one of: "CubeTexture" | "Procedural" | "Physical" // Which sky to draw: CubeTexture, Procedural or Physical "m_SunColor": "{ , , }" // Sun color [rgb color 0..1] "m_SunAngles": "{ , }" // Sun angles ( yaw, pitch ) "m_SunShininessStrength": "{ , }" // Sun shininess and strength "m_fSunAngularRadiusDegrees": "" // Angular radius of the sun's disc in degrees, shared by every sky ( 0 = the real 0.27 ) [range 0..5] "m_bAtmosphericDayDim": "true" // Dim the sky as the sun nears the horizon ( planetary dusk; turn off in space ) "m_FogColor": "{ , , }" // Distance-fog / aerial-perspective color ( radiance ) [rgb color 0..1] "m_fFogDensity": "" // Fog density 1/m ( 0 = off ) [range 0..0.05] "m_fFogHeightFalloff": "" // How fast fog thins with altitude ( 1/m ) [range 0..0.2] "m_fFogStartDistance": "" // Fog-free radius around the camera ( m ) [range 0..1000] "m_fFogSunGlow": "" // Forward-scatter sun glow mixed into the fog [range 0..2] "m_fShadowAmbientCoolShift": "" // How far the ambient fill in shadow shifts toward sky blue ( 0 = neutral ) [range 0..1] "m_bAstronomicalSun": "true" // Sun direction from the date, time and location rather than authored SunAngles ( implied by PhysicalSky ) "m_bAnimateTimeOfDay": "true" // Advance the clock every frame ( off = frozen at TimeOfDayHours ) "m_dLatitude": "" // Observer latitude, degrees north "m_dLongitude": "" // Observer longitude, degrees east "m_iYear": "" // Civil year "m_iMonth": "" // Civil month 1..12 [range 1..12] "m_iDay": "" // Civil day 1..31 [range 1..31] "m_fTimeOfDayHours": "" // Local time of day, hours [range 0..24] "m_fTimeScale": "" // Local hours per real second ( 1/3600 = real time ) [range 0..4] "m_fTimeZoneOffsetHours": "" // UTC offset in hours ( 99 = derive from longitude ) "m_fTurbidity": "" // Atmospheric haze: 2 clear, 4 normal, 8+ smog [range 1.5..12] "m_fSunIntensity": "" // Top-of-atmosphere solar irradiance scale [range 1..80] "m_fMoonLightScale": "" // Moonlight brightness relative to the sun [range 0..0.01] "m_fStarBrightness": "" // Star field brightness [range 0..4] "m_fGroundAlbedo": "" // Ground albedo the horizon band picks up [range 0..1] "m_fAtmosphereQuality": "" // Fraction of the atmosphere raymarch steps taken ( 1 = full, lower = cheaper sky ) [range 0.1..1] "m_bGodRays": "true" // Screen-space crepuscular rays from the sun "m_fGodRayDensity": "" // How far toward the sun each sample steps [range 0.1..1] "m_fGodRayDecay": "" // Falloff per sample along the ray [range 0.8..1] "m_fGodRayWeight": "" // Per-sample weight [range 0..2] "m_fGodRayExposure": "" // Overall shaft brightness [range 0..2] "m_fGodRaySunFocus": "" // How sharply the effect falls off away from the sun [range 1..8] "m_bClouds": "true" // Volumetric cloud deck ( needs the volumetric clouds pass ) "m_fCloudCoverage": "" // How much sky is cloud ( 0 = clear, march skipped ) [range 0..1] "m_fCloudDensity": "" // Optical density multiplier [range 0.1..3] "m_fCloudBaseAltitude": "" // Cloud base, metres [range 200..8000] "m_fCloudTopAltitude": "" // Cloud top, metres [range 400..14000] "m_fCloudAlbedo": "" // How much light a droplet returns [range 0.05..1] "m_fCloudWindSpeed": "" // Drift speed multiplier [range 0..8] "m_fCloudWindDirectionDegrees": "" // Drift bearing, degrees [range 0..360] "m_fCloudWindShear": "" // How much faster the top runs than the base [range 1..4] "m_uiCloudResolutionDivisor": "" // March at 1/N screen resolution and upsample [range 1..4] "m_fCloudFormationSize": "" // Formation size, metres [range 400..6000] "m_fCloudErosion": "" // Billow edge erosion [range 0..0.8] "m_fCloudEvolutionSpeed": "" // Shape evolution independent of wind [range 0..4] "m_fCloudExtinction": "" // Extinction per metre [range 0.001..0.02] "m_uiCloudViewSteps": "" // View march samples [range 32..192] "m_uiCloudLightSteps": "" // Sun shadow samples [range 2..8] "m_bCloudDebugShowDensity": "true" // Show the marched alpha instead of the scene } } // 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_fWaterInteractionRadius": "" // World-space contact sphere radius in metres; zero disables, positive radii have a 0.5 metre minimum [range 0..16] "m_fWaterInteractionStrength": "" // Strength of the contact disturbance [range 0..2] "m_bWaterObstacle": "true" // reflect simulated ripples around the contact footprint "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_PatchSize": "{ , }" "m_bObjectInteractions": "true" "m_bPersistentFoam": "true" "m_fFoamGeneration": "" "m_fFoamHalfLife": "" "m_bAuthoredBodyField": "true" "m_BodyBounds": "{ , , , }" "m_uiBodyId": "" "m_bWaterOutsideBounds": "true" "m_bDryIsland": "true" "m_DryIslandBounds": "{ , , , }" "m_fBedDepth": "" "m_fShoreSlope": "" "m_fRoughness": "" "m_fAbsorptionDensity": "" "m_fFoamStrength": "" "m_fCausticsStrength": "" "m_fRefractionStrength": "" "m_fRippleStrength": "" "m_fShoreWidth": "" "m_FlowVelocity": "{ , }" "m_fFoamBreakup": "" "m_fStrength": "" "m_fScale": "" "m_fReflRefrStrength": "" "m_fAnimspeed": "" "m_fWaterElevation": "" "m_fProjectorElevation": "" "m_WaterColor": "{ , , }" "m_fSurfaceOpacity": "" "m_bPaused": "true" "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_fWaterInteractionRadius": "" // World-space contact sphere radius in metres; zero disables, positive radii have a 0.5 metre minimum [range 0..16] "m_fWaterInteractionStrength": "" // Strength of the contact disturbance [range 0..2] "m_bWaterObstacle": "true" // reflect simulated ripples around the contact footprint "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_fWaterInteractionRadius": "" // World-space contact sphere radius in metres; zero disables, positive radii have a 0.5 metre minimum [range 0..16] "m_fWaterInteractionStrength": "" // Strength of the contact disturbance [range 0..2] "m_bWaterObstacle": "true" // reflect simulated ripples around the contact footprint "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, 5 fly ) // 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_fWaterInteractionRadius": "" // World-space contact sphere radius in metres; zero disables, positive radii have a 0.5 metre minimum [range 0..16] "m_fWaterInteractionStrength": "" // Strength of the contact disturbance [range 0..2] "m_bWaterObstacle": "true" // reflect simulated ripples around the contact footprint "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_fWaterInteractionRadius": "" // World-space contact sphere radius in metres; zero disables, positive radii have a 0.5 metre minimum [range 0..16] "m_fWaterInteractionStrength": "" // Strength of the contact disturbance [range 0..2] "m_bWaterObstacle": "true" // reflect simulated ripples around the contact footprint "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_fWaterInteractionRadius": "" // World-space contact sphere radius in metres; zero disables, positive radii have a 0.5 metre minimum [range 0..16] "m_fWaterInteractionStrength": "" // Strength of the contact disturbance [range 0..2] "m_bWaterObstacle": "true" // reflect simulated ripples around the contact footprint "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_BackgroundColor": "{ , , , }" // solid plate behind the text ( alpha 0 = none ) [rgb color 0..1] "m_vBackgroundPadding": "{ , }" // plate margin around the text, in text units "m_BorderColor": "{ , , , }" // border drawn inside the plate edge [rgb color 0..1] "m_fBorderThickness": "" // border band width, in text units "m_bDrawInAlphaPass": "true" // Draw in the alpha pass ( after particles ) so the text stays in front of particle effects "m_bDepthTested": "true" // let world geometry occlude the text ( off = always on top ) "m_bTwoSided": "true" // printed on both faces: seen from behind, the sign spins so it still reads "m_bLit": "true" // light the sign with the scene instead of drawing it at full brightness "m_bEngraved": "true" // cut the glyphs into the plate rather than printing them on it ( needs Lit ) "m_fEngraveDepth": "" // how deep the cut reads; negative raises the letters off the plate instead [range -2..2] "m_fEngraveBevel": "" // chamfer width between the glyph face and the plate, in text units ( like the padding ) [range 0.005..0.25] "m_bCastPlateShadow": "true" // the plate casts a shadow ( the glyphs are cut out of it and cast none ) "m_fStandOff": "" // gap from the origin along the facing normal, so a post sits behind the sign } } // 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_fWaterInteractionRadius": "" // World-space contact sphere radius in metres; zero disables, positive radii have a 0.5 metre minimum [range 0..16] "m_fWaterInteractionStrength": "" // Strength of the contact disturbance [range 0..2] "m_bWaterObstacle": "true" // reflect simulated ripples around the contact footprint "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_fWaterInteractionRadius": "" // World-space contact sphere radius in metres; zero disables, positive radii have a 0.5 metre minimum [range 0..16] "m_fWaterInteractionStrength": "" // Strength of the contact disturbance [range 0..2] "m_bWaterObstacle": "true" // reflect simulated ripples around the contact footprint "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 ### SEOSMWorldEntity { "type": "SEOSMWorldEntity", "members": { "m_fWaterInteractionRadius": "" // World-space contact sphere radius in metres; zero disables, positive radii have a 0.5 metre minimum [range 0..16] "m_fWaterInteractionStrength": "" // Strength of the contact disturbance [range 0..2] "m_bWaterObstacle": "true" // reflect simulated ripples around the contact footprint "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_OriginLat": "" // GPS latitude that becomes world ( 0, 0 ) "m_OriginLon": "" // GPS longitude that becomes world ( 0, 0 ) "m_SectorSize": "" // Streamed tile size in metres ( quadtree leaf size ) "m_WorldExtent": "" // Total world span in metres ( snaps up to sector * power-of-two ) "m_LoadRadius": "" // Sector load radius in metres ( 0 = auto ) "m_UnloadRadius": "" // Sector unload radius in metres ( 0 = auto ) "m_bSpawnBuildings": "true" // Extrude building footprints into 3D meshes "m_bTexturedBuildings": "true" // Textured facade buckets + per-pane windows ( off = flat colour ) "m_bBuildingLabels": "true" // Billboarded 3D name labels over named buildings "m_bStreetProps": "true" // Lamp posts, trees, signals, pavement clutter "m_bBuildingColliders": "true" // Record footprint bounds for circle collision "m_bFlatTerrain": "true" // Flatten tiles to y = 0 ( off = real streamed elevation ) "m_UrbanGroundBlend": "" // Blend the terrain palette toward urban ground [range 0..1] "m_UrbanGroundColor": "{ , , }" // Urban ground colour blended into the terrain [rgb color 0..1] "m_MetersPerLevel": "" // Storey height when only a level count is tagged "m_DefaultBuildingHeight": "" // Height when nothing is tagged "m_uiTileResolution": "" // Interior height samples per tile side "m_uiElevationZoom": "" // Slippy-map zoom for fine elevation tiles "m_uiCoarseZoom": "" // Slippy-map zoom for the coarse horizon base "m_uiMaxInFlightSectors": "" // Sector fetches allowed in flight at once "m_OverpassUrl": "" // Overpass endpoint ( empty = default + mirrors ) "m_ElevationUrl": "" // Terrarium elevation tile base URL ( empty = default ) } } // script API ( callable on a SEOSMWorldEntity@ 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 ### SEWaterPatchEntity { "type": "SEWaterPatchEntity", "members": { "m_fWaterInteractionRadius": "" // World-space contact sphere radius in metres; zero disables, positive radii have a 0.5 metre minimum [range 0..16] "m_fWaterInteractionStrength": "" // Strength of the contact disturbance [range 0..2] "m_bWaterObstacle": "true" // reflect simulated ripples around the contact footprint "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_PatchSize": "{ , }" "m_bObjectInteractions": "true" "m_bPersistentFoam": "true" "m_fFoamGeneration": "" "m_fFoamHalfLife": "" "m_bAuthoredBodyField": "true" "m_BodyBounds": "{ , , , }" "m_uiBodyId": "" "m_bWaterOutsideBounds": "true" "m_bDryIsland": "true" "m_DryIslandBounds": "{ , , , }" "m_fBedDepth": "" "m_fShoreSlope": "" "m_fRoughness": "" "m_fAbsorptionDensity": "" "m_fFoamStrength": "" "m_fCausticsStrength": "" "m_fRefractionStrength": "" "m_fRippleStrength": "" "m_fShoreWidth": "" "m_FlowVelocity": "{ , }" "m_fFoamBreakup": "" "m_fStrength": "" "m_fScale": "" "m_fReflRefrStrength": "" "m_fAnimspeed": "" "m_fWaterElevation": "" "m_fProjectorElevation": "" "m_WaterColor": "{ , , }" "m_fSurfaceOpacity": "" "m_bPaused": "true" "m_bPlanarReflectionEnabled": "true" "m_fReflectionResolutionScale": "" "m_fReflectionClipPlaneOffset": "" } } // Authored patch optics and waves } } // script API ( callable on a SEWaterPatchEntity@ 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 ### SEBridgeDeckEntity { "type": "SEBridgeDeckEntity", "members": { "m_fWaterInteractionRadius": "" // World-space contact sphere radius in metres; zero disables, positive radii have a 0.5 metre minimum [range 0..16] "m_fWaterInteractionStrength": "" // Strength of the contact disturbance [range 0..2] "m_bWaterObstacle": "true" // reflect simulated ripples around the contact footprint "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": "" "m_uiExtrudeSurfaces": "" "m_bMetricUVs": "true" "m_fTopScale": "" } }, ... ] // 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_AmbientOcclusion": "" // Ambient / environment occlusion ( 1 = open sky ); scales IBL only, never the direct lights [range 0..1] "m_Emissive": "" // Self-illumination multiplier ( > 1 blooms under the ACES tonemap ) [range 0..16] "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 ) "m_bTransparent": "true" // Blend instead of cutout: draws in the alpha pass and writes no depth "m_fOpacity": "" // 0 = invisible, 1 = opaque ( needs Transparent ) [range 0..1] "m_ShadingEffect": "" // Effect the material shades with ( empty = PBR.fx; Facade.fx adds building surface work ) "m_FacadePaneUVSize": "" // Facade.fx only: window bay in UV units ( bay metres / tile metres ); per-pane glazing variation, 0 = off "m_FacadePaneUVSizeV": "" // Facade.fx only: bay height in UV units ( 0 = square ) "m_FacadeInteriorDepth": "" // Facade.fx only: parallax room depth behind glass, in bay widths ( 0 = flat ) "m_FacadeInteriorWarmth": "" // Facade.fx only: 0 = office daylight, 1 = lit shop [range 0..1] "m_Stations": "" // Solved profile: 'x,z,deckY,groundY,span' per station, in entity-local metres "m_fHalfWidth": "" // Half-width of the carriageway the deck carries, metres "m_fShoulder": "" // Extra deck built past the carriageway on each side "m_fGirderDepth": "" // Structural depth under the deck where it spans "m_fSkirtEmbed": "" // How far a ramp's skirt walls are driven below the terrain "m_fPierSpacing": "" // Spacing of the piers dropped under the span "m_fPierHalfWidth": "" // Half-width of a pier "m_fParapetHeight": "" // Height of the barrier down both deck edges "m_fParapetThickness": "" // Thickness of the barrier "m_DeckColor": "{ , , }" // Carriageway surface colour [rgb color 0..1] "m_StructureColor": "{ , , }" // Girder / soffit / pier colour [rgb color 0..1] "m_ParapetColor": "{ , , }" // Barrier colour [rgb color 0..1] } } // script API ( callable on a SEBridgeDeckEntity@ 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 ## 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