Basic concepts

The source directory

The source directory contains all the files that make up an application.

There is no fixed structure for the files and folders in the source directory, you can organize your content as you see fit. You can for example decide to put all the textures and sounds in the “textures” and “sounds” folders, or maybe sort the content on a per-object basis by putting all the assets for an enemy in the “units/enemy” folder.

There is, however, a small number of required files which are needed for the engine to start-up correctly:

├── boot.config            <- First file loaded by the engine
├── boot.package           <- Package to load on boot
├── boot.lua               <- Lua script to launch on boot
└── global.physics_config  <- Global physics-related configurations

The boot directory and the boot.config file

Any directory within the source directory containing the file named boot.config is a boot directory.

The boot.config is the first file read by Crown; it specifies the package to load and the lua script to execute on boot and various other boot-time settings. See boot.config reference for details.

Normally there is a single boot.config file, placed at the top of the source directory. This is the file which Crown looks at by default.

In some circumstances is desirable to have multiple boot.config files. You can set which boot directory Crown should use with the switch --boot-dir.

In the example below, a minimal boot.config file tells the engine to load the package boot and run the Lua script lua/game.

cat boot.config
boot_package = "boot"      // Package to load on boot
boot_script  = "lua/game"  // Lua script to execute on boot

The data directory

Crown reads source data from the source directory and compiles it into efficient binary representation. The result of the compilation process is stored in the data directory.

├── data                <- Contains compiled data files
|   ├── a14e8dfa2cd...  <- Compiled file
|   ├── 72e3cc03787...  <- Another compiled file
|   └── ...
├── data_index.sjson    <- Used to convert resource IDs to human-readable names
├── last.log            <- Text log from the last engine execution
└── temp                <- Temporary files from data compilers

The .dataignore file

The .dataignore file specifies files that Crown should ignore when compiling data.

When Crown bumps into unknown files in the source directory, it reports an error and quits the compilation. This is often desired behavior, since you do not want non-essential data in your source directory.

In all other cases, you should create a .dataignore in the source directory.


cat .dataignore
# This is a comment.

# Blank lines are ignored.
# Everything else is simple glob pattern (*, ?).

Units of measurement

Crown uses MKS (meters, kilograms and seconds) units and radians for angles.