# Basic concepts
Any ct.js game consists of textures, copies, types, and rooms.
- A texture is an image that doesn't do much by itself but is used by copies and can be drawn with code. This asset is also referred to as a sprite, but it can also be a tileset, a background, etc.
- A copy is a logical entity in your game that can interact with user inputs and other copies. Enemies, trees, bullets, gems, bonuses, cats — everything is a copy. Copies are often called "objects", "actors" or "instances" in other game engines.
- Each copy corresponds to a specific type. A type is a template for new copies with common settings and behavior. It may be called a class or an object in other game engines.
- A room is a 2D space in your game where you place your copies. Rooms may have their own additional behavior (level scripts). Rooms are also often referred to as levels or maps. A notable difference is that rooms in ct.js are boundless when other 2D engines tend to set a specific size to it.
There are additional resources that help make games jucier, better, fun to play, and easier to develop:
- Actions that combine different input methods into one API, so you can code once for keyboards, gamepads, virtual joysticks and for other stuff.
- Catmods are additional modules that hack on the core library, add new tools for programming and new features to the engine.
- Custom fonts allow you to use .ttf files in your games, so your game looks nicely in every browser or PC.
- Emitter tandems, or simply particle systems, are flexible visual effects made of textures. Explosions, magic effects, rain, snow, and many other special effects may be made with these.
- Skeletal animations for skinnable characters with smooth animations.
- Sounds are audio assets that are played by code.
- Styles are templates for drawing labels that are used while making the user interface.