# Ona ## Table of Contents 1. [Overview](#overview) 1. [Goals](#goals) 1. [Technical Details](#technical-details) 1. [Requirements](#requirements) 1. [Building](#building) 1. [Project Structure](#project-structure) 1. [No Headers](#no-headers) 1. [Module Conventions](#module-conventions) ## Overview Ona is a straightforward game engine with the aim of staying reasonably lightweight through a modular architecture. Ona is also the Catalan word for "wave". ## Goals * Fully-featured two-dimensional raster and vector rendering capabilities. * Support major computer gaming ecosystems; Namely Microsoft Windows, SteamOS, GNU Linux systems running on X11 or Wayland, and the web. * Minimize external dependencies. * Be lightweight in base engine memory usage and disk size. * Provide utilities for handling rendering but otherwise leave the higher-level game logic data structuring to the programmer. * Provide a simple scripting interface for people who want to do something quick and a powerful plug-in API for engine-level extensions and speed-critical application logic. * One data serialization and configuration system to rule them all backed by a scripting language. ## Technical Details ### Requirements Ona currently depends the following third-party tools to build it: * Operating system with support for SDL2 at version 2.0.20 or above. * Zig compiler toolchain. As the project evolves, dependencies on libraries external to the project codebase will be minimized or removed outright to meet the goals of the project as closely as possible. ### Building Once all third-party tools and system-wide dependencies are satisfied, navigate to the root project folder and run the `./build.py` Python build script. By default, the build script will build the engine runtime, required for running games built with Ona, in release-debug mode. ##### Kym Scripting language designed around an execution speed-optimized design, and features like first-class support for common mathematic types. ##### Runtime Base execution environment for games built using Ona.