# Townengine Wiki : About Townengine

# T1. About Townengine

Go back

T1.1 Introduction

> Townengine, {twn}, is an opinionated game development framework designed around ideas of simplicity, managed state, care for old devices, portability, language agnosticism, use-case orientation, iterability and low latency.

> Simplicity. It makes assumptions that trickle down to your game code. There's no delta between frames, nor resolution change. Textures have constant known size, not requiring scaling.

> Managed state. Designed around this we can provide hot reloading at any point, serialization for save files and debug dumps, as well as synchronization over network, without any user code. Every frame apparent engine state is cleared, which removes another variable for you to handle, - when to initialize. There's no need for you to call `LoadImage()` of sorts before using it in render, you just pass filepaths around. Input is initialized anew each frame, making rebinds trivial.

> Care for old devices. It's to both to provide it for more people, who otherwise might not be able to make games they want, as well as to have restrictions that constitute in desired aesthetic. Graphics capabilities are limited, but what is present, - is heavily optimized. It is rather different from performance-driven approach that tries to take advantage of the latest hardware and features, sacrificing both the reach and portability.

> Portability. Written in C11 with all dependencies being in C, it's possible to compile it to most platforms. SDL2 is at the center and you cannot get better than this. Default graphics API is OpenGL 1.5 with extension detection. As an example, it builds and runs on Haiku OS with LLVMpipe.

> Language agnosticism. API is restricted to not require much glue. Language interpreters don't need to be part of the engine itself. Anything with C ABI support can link to it.

> Use-case orientation. It doesn't try to be a yet another general purpose engine conquering all and nothing. Instead we seek particular use cases and implement the most essential parts.

> Iterability. Defaults provided for most of the API, making initial code faster to spring. Hot reloading for both assets and code.

> Low latency. Care is given to various incarnations of feared latency. Engine is fast to build, allowing for low commitment patches. Startup time is profiled and optimized. Streaming is used as much as possible for asset load.

T1.2 Wiki

> Purpose of this wiki is to collect information on various usages of {twn} across the genres, FAQ style. You're welcomed to contribute to it. It's written in HTML so basic you can edit it by hand. Just check template.html.