Screen 13 is an easy-to-use 3D game engine in the spirit of QBasic.
Games made using Screen 13 are built as regular executables using a design-time asset baking process. Screen 13 provides all asset-baking logic and aims to, but currently does not, provide wide support for texture formats, vertex formats, and other associated data. Baked assets are stored in .pak
files.
Asset baking is the industry-standard process of converting files from their native file formats into a runtime-ready format that is optimized for both speed and size. Currently Screen 13 uses a single file (or single HTTP/S endpoint) for all runtime assets. Assets are baked from .txt
and .json
files which you can find examples of in the examples/content
directory.
Included are four examples you might find helpful:
basic.rs
- Displays 'Hello, World!' on the screen. Please start here.nibbles.rs
- A game built using lines as the only graphical element. (Not started yet)gorilla.rs
- A game demonstrating 2D bitmaps/tilemaps. (Not started yet)wasm.rs
- A 3D technology demonstration; runs in your web browser. (Not started yet)Each of these examples requires an associated asset .pak
file in order to run, so you will need to run the examples like so:
cargo run examples/content/basic.txt
cargo run --example basic
These commands do the following:
basic.txt
into basic.pak
basic
example (Press ESC to exit)This engine is very young and is likely to change as development continues.
As a child I was given access to a computer that had GW-Basic; and later one with QBasic. All of my favorite programs started with:
CLS
SCREEN 13
These commands cleared the screen of text and setup a 320x200 256-color palletized color video mode. There were other video modes available, but none of them had the 'magic' of 256 colors.
Additional commands QBasic offered, such as DRAW
, allowed you to build very simple games incredibly quickly because you didn't have to grok the enirety of linking and compiling in order get things done. I think we should have options like this today, and this project aims to allow future developers to have the same ability to get things done quickly while using modern tools.
The example code uses a few of the awesome 2D, 3D, and audio assets provided by Kenney Vleugels. These assets have been generously provided under the CC0 1.0 license and we are therefore able to share them with you in this repository. Please consider supporting Kenney for the excellent work and for what it is doing to help the game development community.
NOTE: If you look within the examples/content/kenney.nl
directory you will find the packages we are using, however these packages are not the complete packages offered on their website because we have removed any assets that are not used in the examples. If you want to use these assets in your game we recommend you get your copy directly from their website.
RUST_LOG
environment variable set to trace
for detailed debugging messages