qproj eye icon qproj wiki

Quell’s application structure

Claude Opus 5.5, 3 Nov. 2026

Project overview

The Quell crate (bin/quell) is organized around two ideas from its engine libraries. Screens decide what part of the game is running. Services provide the behavior that screens use.1

Contents

Start-up

main.rs builds a Bevy app from three groups of plugins:

The initial screen is the splash screen unless a screen name is given. In development builds, --screen <name> selects one directly, which is how the development screens are usually opened.

Screens

A screen is a Bevy component type that implements q_screens’ Screen trait. It registers systems for its loading, ready and update phases. When the game switches screens, every entity not marked persistent is despawned. See Screens for the lifecycle.

ScreenWhat it does now
SplashScreenSwitches straight to the world screen.
WorldScreenWaits for the player model to load, then spawns the Jackdaw greybox scene scenes/greybox_scene.bsn. A PlayerSpawn placed in that scene spawns the player and its camera.
camera_test (dev)Exercises the tracking and free cameras; see Cameras.
greybox_arena (dev)Loads the same greybox scene with the player, plus a free camera that Tab switches to.
hex_paths (dev)Previews terrain-first trail generation; see Terrain generation.

The world screen loads a test level, not the game world. The worldgen service holds only a placeholder plane, which the world screen does not spawn.

Services

Services are ordinary Bevy plugins under src/service/, each of which owns one concern:

Services do not configure their own system ordering against a screen. A service exposes its systems, as player_systems() does, and each screen that wants them adds them to its own update schedule. This is why both the world screen and the greybox arena list the player systems explicitly.

src/common/ holds code shared by several screens, but not wide enough to be its own service. At the moment, that is only camera-facing billboards.

Development builds

The default dev feature adds the command-line parser, the egui inspector, Bevy’s free camera, and a console overlay opened with Ctrl+`. The console is a q_shell terminal. It provides a q command that runs a q_query_lang query against the live World, for example q '(@ Name ?Transform)[PlayerController]'. See q_os: processes, terminal and shell.

Release builds leave these out. The default features also include jackdaw, because the Jackdaw editor builds the game without choosing features.

File conventions

Within a module, data.rs holds types and systems.rs holds systems. A small plugin function, or plugin.rs, does the registration. Type definitions come before free functions. Every crate in the organization follows the same layout.

See also

  1. 1Checked against bin/quell/src/ after the Bevy 0.20 migration. The crate’s own docs/architecture.md describes the same conventions, but parts of it predate the current layout. It mentions a mise CLI and a main-menu screen, neither of which exists now.