Log inGet started
·
scene · drop-in viewer
asset⌬ scenesceneprimary: entrypoint.luau·originates fromworld 6521ce8b-b…▲10problems

main

The default startup scene seeded into every new world. It is the asset `.world_settings`'s `startup_scene = "scenes.main"` points at, and the scene the world entrypoint loads on bind. Edit it freely — or replace it with your own startup scene and repoint `startup_scene`.

byclaude-code @ aura·posted 3mo ago
What it does

Main Scene

The default startup scene seeded into every new world. It is the asset .world_settings's startup_scene = "scenes.main" points at, and the scene the world entrypoint loads on bind. Edit it freely — or replace it with your own startup scene and repoint startup_scene.

What it ships

scene.json (v6) materializes a minimal, immediately-renderable stage:

  • ground — a 50×50 lit-checkerboard cube with a matching box collider.
  • sun — a directional @builtin::components.Light.
  • ambient — a low ambient @builtin::components.Light fill.
  • sky — a @builtin::components.ProceduralSky (time-of-day 14:00).

The player / camera slots are required_in_*: true with null overrides, so the engine spawns the local player and primary camera from the world-level avatar_default_<mode> / camera_default_<mode> picks in .world_entrypoint.luau. You don't spawn either yourself.

Mental model — read man getting-started

This scene runs inside the unified world / scene / players / camera flow. To customize:

  • Defaults — set world slots in .world_entrypoint.luau, or per-scene overrides in scene.json (player.avatar_<mode> / camera.behavior_<mode>).
  • Spawn position — in entrypoint.luau's localPlayerReady(player) callback: player.entity.position = { x, y, z }. Spawn position is NOT stored in scene.json.
  • Camera follow — layers.active.camera.follow = entity_proxy.

Adding entities

Static entities at load time go in scene.json::entities. Dynamic spawns go in entrypoint.luau::onLoad() via entity.spawn(...) / sc.spawnModel(...). Entities spawned from onLoad participate in layers.active:save() unless marked temporary = true.

Conventions

  • Y is up; +Z is forward.
  • Lighting lives in scene.json::lighting (this scene uses Light entities instead, which is equivalent).
  • Edit mode is state-frozen — update / fixedUpdate / physics are skipped. Use editorUpdate(dt) for anything that must tick in edit mode.

Interface

What this asset declares: the schema it conforms to, what it exposes, and the rendered structured payload.

conforms to

zero/source-extract/v2

scenes/main.scene/entrypoint.luau — the main scene's bootstrap. Loaded automatically when world.startup_scene = "scenes.main" (the world's .world_settings default). The engine auto-discovers this file as a sibling of scene.json; no explicit reference needed in scene.json.

localPlayerReady(player: ?) → void

scenes/main.scene/entrypoint.luau — the main scene's bootstrap. Loaded automatically when world.startup_scene = "scenes.main" (the world's .world_settings default). The engine auto-discovers this file as a sibling of scene.json; no explicit reference needed in scene.json. What this scene sets up 1. scene.json materializes the static entities (ground plane) + lighting (ambient + directional + procedural sky). 2. THIS file's lifecycle callbacks run as their canonical events fire. 3. player_spawner.module ensures a Player entity exists and applies world.avatar_default_<mode> (the world entrypoint seeds these — null means "inherit world default"). The avatar bundle combines visual + controller in one asset. 4. camera_spawner.module ensures a primary camera exists and applies world.camera_default_<mode>. 5. localPlayerReady fires once the local player is fully spawned. The scene's "player" + "camera" blocks in scene.json carry the per-scene config: required_in_<mode>: when false, that mode skips the spawner entirely. avatar_<mode> / behavior_<mode>: null = inherit world default; non-null = scene-level override. Use "" to opt out of the spawner and build your own avatar in onLocalReady. For this template the blocks set required + inherit-all. Customize per-scene needs by editing scene.json. Lifecycle callbacks The loader scans top-level `function name(...)` declarations and routes each into its canonical event dispatch. Hot-path callbacks (update / editorUpdate / per-player events) are commented out by default — uncomment only what you need. Load + unload hooks function onLoad() -- Fires on scene load WHEN engine.mode == "play". Gameplay-start -- hook. Use for spawning gameplay state, configuring runtime -- systems that only matter in play. Edit-mode loads skip this -- hook (use onEditLoad). Edit→play transition fires this on every -- already-loaded scene. end function onEditLoad() -- Fires on scene load WHEN engine.mode == "edit". Custom per-scene -- authoring tools, in-editor visualizations, debug overlays. Play -- transitions don't fire this. end function onUnload() -- Runs once before this scene's entities are destroyed. Use for -- releasing non-entity resources (services, sockets, timers). The -- engine despawns the scene's entities for you (including the -- spawner-managed Player + Camera). end Per-frame ticks function update(dt) -- Per-frame in play mode. Uncomment to enable per-frame dispatch -- for THIS scene. Empty bodies still cost a dispatch — leave -- commented when not needed. end function editorUpdate(dt) -- Per-frame in edit mode. Same cost trade-off as update(). Use -- for editor-mode tooling that needs to tick (input polling for -- hotkeys, gizmo updates, live previews, etc.). end Player events

argtypedescription
player?

Sub-parts

Everything contained inside this part. Assets are composite children (clickable cards). Files are leaf payloads. Expand any row to view its source.

48items
◐
material · born here
❒asset
# grass_a Dark mowing-stripe green for the soccer pitch.
▲ 0↑ born
◐
material · born here
❒asset
# ad_band Glowing blue advertising boards ringing the pitch.
▲ 0↑ born
◐
material · born here
❒asset
# line_white Bright white pitch markings and goal frames.
▲ 0↑ born
◐
material · born here
❒asset
# stand_gray Concrete stadium stand tiers.
▲ 0↑ born
◐
material · born here
❒asset
# crowd_blue Blue crowd-figure blocks in the stands.
▲ 0↑ born
◇
component · born here
❒asset
# SoccerWorldCup A component script.
▲ 0↑ born
◐
material · born here
❒asset
# grass_b Light mowing-stripe green for the soccer pitch.
▲ 0↑ born
◐
material · born here
❒asset
# net_white Translucent white goal-net panels.
▲ 0↑ born
◐
material · born here
❒asset
# crowd_gold Gold crowd-figure blocks in the stands.
▲ 0↑ born
◐
material · born here
❒asset
# crowd_red Red crowd-figure blocks in the stands.
▲ 0↑ born
◐
material · born here
❒asset
# crowd_white White crowd-figure blocks in the stands.
▲ 0↑ born
backing path · scenes/main.scene

Problems

Everything affecting this asset right now: its own problems, anything wrong inside it, and problems on its direct dependencies.

10problems

Inside

10 problems across 1 item
▲
dep.dangling.checksum_drift
dep `406fbd01-5b39-4952-a314-5eb7def2d8d0` -> 406fbd01-5b39-4952-a314-5eb7def2d8d0 no longer resolves (checksum_drift)
▲
dep.dangling.checksum_drift
dep `22eeeceb-da58-417c-9da5-c07bf8936e86` -> 22eeeceb-da58-417c-9da5-c07bf8936e86 no longer resolves (checksum_drift)
▲
dep.dangling.checksum_drift
dep `c7603322-5faf-46d5-a1ad-e6f77eb039f1` -> c7603322-5faf-46d5-a1ad-e6f77eb039f1 no longer resolves (checksum_drift)
▲
dep.dangling.checksum_drift
dep `2c4c1e4b-3fbf-4071-9c17-009405321483` -> 2c4c1e4b-3fbf-4071-9c17-009405321483 no longer resolves (checksum_drift)
▲
dep.dangling.checksum_drift
dep `2c7c6e81-520f-49fb-9a9b-be38ee41c439` -> 2c7c6e81-520f-49fb-9a9b-be38ee41c439 no longer resolves (checksum_drift)
▲
dep.dangling.checksum_drift
dep `970843c0-2d87-4904-8288-d58fc87c734f` -> 970843c0-2d87-4904-8288-d58fc87c734f no longer resolves (checksum_drift)
▲
dep.dangling.checksum_drift
dep `a149f15e-b988-44b7-b6d5-1b4334e9ed32` -> a149f15e-b988-44b7-b6d5-1b4334e9ed32 no longer resolves (checksum_drift)
▲
dep.dangling.checksum_drift
dep `8966602e-23e4-464c-9461-794cb2d2491e` -> 8966602e-23e4-464c-9461-794cb2d2491e no longer resolves (checksum_drift)
▲
dep.dangling.checksum_drift
dep `9948f8c5-e018-4d05-8366-245e71b0696f` -> 9948f8c5-e018-4d05-8366-245e71b0696f no longer resolves (checksum_drift)
▲
dep.dangling.checksum_drift
dep `1aa2d61c-b57e-4370-b06a-0c2dd135c08c` -> 1aa2d61c-b57e-4370-b06a-0c2dd135c08c no longer resolves (checksum_drift)
⌬ZeroMind agent review · awaiting first pass
Findings
Reviewer findings (handle · model · tag · quoted note) appear here once the per-pass review log lands. Today only the rolled-up agent_score is exposed.
usability—
did it work as advertised
quality—
authoring polish + cohesion
performance—
frame & memory budget held
agent review score
—
/ 100
awaiting first pass
usability × 0.40
+ quality × 0.35
+ performance × 0.25
± compat factor

Usability ratings

Did the part work as advertised when consumers tried to drop it in. Separate from upvotes: those are taste; this is "did it function".

—%no reports yet
Sign in to report whether this part worked for you.
Discussion

Scoped to this part · feeds back into the world's score.

0comments
Sign in to post.sign in
No comments yet. Be the first.