Only this pageAll pages
Powered by GitBook
Couldn't generate the PDF for 118 pages, generation stopped at 100.
Extend with 50 more pages.
1 of 100

CS2 Lua API

Loading...

Introduction

Loading...

Loading...

Loading...

Loading...

Workshop

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

API

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Overview

Official lua API documentation for fatality.win​

Creating scripts

Welcome to the basics of scripting with our API.

Fatality’s API is designed to mirror the software’s internal structure, giving you substantial control over its subsystems. Some features that could cause instability or damage are restricted.

Basic Concepts

Our scripting engine uses LuaJIT 2.1 (with minor customizations). It’s fully compatible with Lua 5.1 and includes some Lua 5.2 enhancements.

The standard libraries baselib, bit, ffi, math, string and table are available. Note that the ffi library is only available if the Allow insecure option is enabled. Refer to the official Lua documentation for more details.

If we ever modify any standard functions, we will document those changes to keep you informed.

Documentation Overview

Throughout the API reference, you’ll encounter various labels used to describe a certain method or a field.

Labels:

Field Function Method Constructor Read only Insecure only

All the possible labels are listed above.

  • Field: this label indicates that the item is a standard field. It's type will be explained just below the name.

  • Function: this label indicates that the item is a function, which you call using a dot syntax (obj.fn()).

  • Method: this label indicates that the item is a method, which is also a function, but it's advised to call it with the colon syntax (obj:fn()).

  • Constructor: this label indicates that the item is a constructor definition. You don't have to call any field in particular, but instead you must invoke the type itself (example: vector has __call, meaning you should invoke it like this: vector()).

  • Read Only: this label indicates that the item is read only, and it's value cannot be changed. Typically, this restriction does not extend to any child elements.

  • Insecure only: this label indicates that the item is only available if the insecure mode is turned on.

Argument and return lists

Arguments and return values are listed in the exact order you must supply or capture them. For instance, if a parameter is shown first, it is to be passed as the first argument to the function. The same goes for return values: the first listed value will be placed in the first variable you declare, and so on.

Types

Some type descriptions have special symbols in place:

  • type? means that the type might be nil.

  • type<other> means that inner methods or fields will use other type.

  • <other> means that the type will be either other, or any of its child types.

Rules

To keep your scripts safe and easy to use, we have quite a lot of safety measures in place. But, due to how specific stuff works, we are unable to fully make it as safe as possible. Therefore, here are some notes you should know before writing scripts:

You Control the Lua State

You may replace or override API functions, but you’re responsible for maintaining stable behavior. If you encounter any bugs in the default API (excluding FFI), please report them so we can address the issue.

Prioritize Safety

Using FFI grants you extensive freedom. Keep in mind that scripts which could harm users in any way are disallowed and will be removed. Whenever possible, rely on the provided API or request additional functionality if you need something not currently offered. Custom “script loaders” are strictly disallowed.

Keep the Software Usable

Avoid hiding unrelated UI elements, obstructing user input, or interfering with the overall user experience. Scripts that disrupt functionality or harass users risk removal from the Workshop.

First Steps

Now that you’ve covered the essentials, it’s time to start scripting.

Fire up a text editor

Feel free to use any text editor you prefer: , , or even a simple Notepad.

Local scripts are located here: <CS2_Directory>/game/csgo/fatality/scripts. You may notice there's also a lib directory, but we’ll get to that later.

Create a new file ending with .lua, and begin your work on the script.

.ljbc format cannot be loaded from local sources.

Writing your first script

A typical “Hello world!” example can be a bit trivial, so let’s try something slightly more advanced instead.

Now, let's break down this example script:

Defining a callback function

Most of your scripting will run within we provide. Each event has its own signature, so pay attention to the parameters your callback function should accept. present_queue doesn’t provide any parameters, so our function doesn’t need any either.

Defining something local is optional, although recommended for clearer scope management.

Accessing drawing layer

With the callback function defined, let’s actually render something on the screen!

To do this, you first need to access the . We provide a single drawing layer that’s safe to use within the game thread. Due to how the game functions internally, it’s strongly discouraged to call game functions in other threads. Luckily all of our events run in the game thread.

This setup allows you not only to draw but also to query information on player health or other entities.

To access the layer, simply reference the surface field in the draw table:

You don't have to store it in a variable, but it would be nicer if you don't have to type out draw.surface every time, right?

Setting a font

After retrieving the layer, you must set a font object before drawing any text on the screen. This is purely for performance reasons, so you don’t have to pass a heavy font object every time you draw text.

All fonts are stored in . To access a font, either use dot syntax, or treat it like a dictionary:

Drawing text

With the font set, it’s time to draw some text.

Invoke the method on the layer. Notice that it’s called using the colon syntax: obj:fn(), because it’s a method.

You can also invoke methods with a dot syntax, as long as you provide the object in the first argument. Both calls: obj:fn() and obj.fn(obj) are identical.

Registering a callback

Now that you’ve created your first callback, you need to register it so Fatality knows to invoke it. This is done by calling the method on .

Result

That's it! If you've done everything correctly, you should see something like this:

Creating Libraries

Libraries are not yet supported, but will be available soon.

Publishing Tool

Welcome to the Publishing Tool documentation.

  • Creating a script: Step By Step Guide

  • Using branches: Branches

  • Using libraries: Libraries & Dependencies

Bundled Assets

If you want to include additional files with your script (e.g. sounds, images, or data), you can bundle them inside a ZIP archive with a defined structure.

  • The archive must contain a script.lua file in the root.

  • The archive must not contain a scripts/remote/ directory or any files inside it.

All bundled assets are automatically installed to a directory chosen by the API engine. See ws for usage details.

game

Usage: game.{interface_or_function}

This table exposes various internal services and global objects used by Fatality, and also provides a way to retrieve any additional services you need.

global_vars

Field

Type:

This service exposes global variables used by the game, such as frame time or current server time.


engine

Field

Type:

This service exposes the engine client, which includes commonly used engine-related functions.


input

Field

Type:

This service exposes the command input system.


input_system

Field

Type:

This service exposes the control input system.


game_ui_funcs

Field

Type:

This service exposes the game's UI functions.

cgame_ui_funcs

Usage: game.game_ui_funcs:{method}

This type represents the game's UI functions.

get_binding_for_button_code

Method

Returns the binding name for a button code.

Arguments

Name
Type
Description

code

int

Button code.

Returns

Type
Description

string

Binding.

Example

local bind = game.game_ui_funcs:get_binding_for_button_code(code);

convar

Represents a convar used by the game.

name

FieldRead only

Type: string


description

FieldRead only

Type: string


flags

FieldRead only

Type: int


value

FieldRead only

Type: <type>

The value of the convar represented in its type

outline_mode

This enum is used to determine the outline mode for outlined shapes.

inset

Inset outlining. This means that the outline will be inside the shape (+1px from top-left, -1px from bottom-right).


outset

Outset outlining. This means that the outline will be outside of the shape (-1px from top-left, +1px from bottom-right).


center

Center outlining. This means that the outline will match the shape size.

render_mode

This enum is used to toggle rendering modes.

normal

Normal, opaque rendering. All polygons will get filled with color, and texture sampling will be fully supported. This is the default mode to render shapes in layer.


wireframe

Wireframe rendering. This means that the polygons will no longer be filled with color, nor texture sampling will ever work.

Types

In this section, the most common gui types are listed, that are not particularly bound to a specific part of the gui.

Use the left menu (or hamburger menu, if you are on mobile) to navigate between types.

csweapon_mode

This enum represents the firing mode for a weapon.

primary_mode

Primary mode (usually left mouse button).


secondary_mode

Secondary mode (usually right mouse button).

shadow_dir

This enum is used to determine shadow direction for add_shadow_line method.

up

The darkest side of the shadow will be at the bottom.


down

The darkest side of the shadow will be at the top.


left

The darkest side of the shadow will be on the left side.


right

The darkest side of the shadow will be on the right side.

cfiring_mode

Firing mode information.

values_arr

Type: <type>

Values.

rounding

rounding

Last modified: 03 January 2025

This enum is used to determine the rounding for rounded shapes.

tl

Round top-left corner.


tr

Round top-right corner.


bl

Round bottom-left corner.


br

Round bottom-right corner.


t

Round both of the top corners. This produces the same result as using bit.bor(draw.rounding.tl, draw.rounding.tr).


l

Round both of the left corners. This produces the same result as using bit.bor(draw.rounding.tl, draw.rounding.bl).


r

Round both of the right corners. This produces the same result as using bit.bor(draw.rounding.tr, draw.rounding.br).


b

Round both of the bottom corners. This produces the same result as using bit.bor(draw.rounding.bl, draw.rounding.br).


all

Round all corners. This produces the same result as using bit.bor(draw.rounding.tl, draw.rounding.tr, draw.rounding.bl, draw.rounding.br).

text_alignment

This enum determines how to align the text when drawing it.

left and top, as well as right and bottom are interchangeable. It means that if you use left for vertical alignment, it will produce exactly the same result as using top, and vice versa. top/bottom are here only for the sake of convenience and readability.

left

Align left. It will mean that the text position's X coordinate is located at the left side of the text area.


center

Align center. It will mean that the text position's X (or Y) coordinate is located at the center of the text area.


right

Align right. It will mean that the text position's X coordinate is located at the right side of the text area.


top

Align top. It will mean that the text position's Y coordinate is located at the top side of the text area.


bottom

Align bottom. It will mean that the text position's Y coordinate is located at the bottom side of the text area.

Types

In this section, the most common renderer types are listed, that are not particularly bound to a specific part of the renderer.

Use the left menu (or hamburger menu on mobile) to navigate between types.

Instances

local function on_present_queue()
    local d = draw.surface;
    d.font = draw.fonts['gui_main'];
    d:add_text(draw.vec2(50, 50),
        'Hello drawing! My first script speaking.',
         draw.color.white()
    );
end

events.present_queue:add(on_present_queue);
local function on_present_queue()
end
local d = draw.surface;
d.font = draw.fonts['gui_main'];
d:add_text(draw.vec2(50, 50),
        'Hello drawing! My first script speaking brev.',
         draw.color.white()
    );
events.present_queue:add(on_present_queue);
Visual Studio Code
Notepad++
several callbacks
drawing layer
draw.fonts
add_text
add
events.present_queue
My first lua

Updating Items

In order to update an item you need to follow these steps:

Upload a new build & wait for approval

Check on how to upload a build.

Set build active

  1. Navigate to Builds and find the approved build.

  2. Click Set to branch

  3. Select Default branch

  4. Click Save

After these actions are complete, your new build will be available for users instantly.

Builds are NOT automatically set to the Default branch upon approval! Once you get the notification that your build has been approved, proceed to set its branch to Default.

Additionally, you may want to test upcoming builds before they hit the Live item. For that, we recommend looking into Branches.

Branches

Branches let you create separate versions of your items so users can test upcoming builds before they are pushed to the live Default branch.

Open the Branches tab to manage existing branches or create new ones:

Creating a branch

Click Add branch, enter a branch title, and confirm.

You can create as many branches as you need.

After a branch is created, you can:

  • Add users (they’ll be allowed to opt in).

  • Set a price (makes the branch public so anyone can purchase it).

Note: Adding users does not automatically enable the branch for them. It only gives them the option to join.

Managing Builds

Branches can hold any builds - both verified and unverified.

To assign a build to a branch:

  1. Go to the Builds tab.

  2. Find the build you want to assign.

  3. Click Set branch.

  4. Select the branch and submit.

This immediately makes that build available to anyone using the branch.

Getting Started

Workshop allows you to publish, advertise, and earn from your items. It provides a broad set of features for both publishers and end users, making the storefront easy to use and reliable to manage.

Core Concepts

Before publishing, it's important to understand the key concepts used in Workshop:

  • Storefront - the main Workshop UI where users search, view, subscribe to, or purchase items;

  • Publishing Tool - the area where item authors create, update, and manage their entries in the storefront;

  • Item - a single Workshop entry. This can be a script, a library, or a config;

  • Build - a specific version of an item that gets delivered to the end user;

  • Branch - a channel that holds a single build (e.g. stable, beta);

  • Dependency - a required library that an item relies on to function;

  • Capability - a permission that unlocks restricted API functions (e.g. filesystem access, clipboard).

Next Steps

  1. Read the .

  2. Complete a tutorial.

Libraries & Dependencies

Libraries are specialized items that are not visible in the Storefront. Instead, they are available for other publishers to reference inside their scripts.

Creating a Library

Creating a library works the same way as creating a script (see).

The only difference is that a library requires a Library ID.

  • The Library ID is a unique identifier used by scripts to reference your library.

  • Without it, other publishers cannot include your library as a dependency.

You can create and assign a Library ID in the General tab:

Once published and approved, your library becomes available for others to use as a dependency.

Referencing Libraries

When your script references a library, the library is automatically loaded alongside your script at runtime.

To add a library dependency:

  1. Go to the Dependencies tab.

  2. Click Add dependency.

  3. Find the library you want to reference and click Add.

  4. The library will appear in your dependencies list.

It is recommended to reference a specific version of a library rather than always pulling the latest. This ensures your script continues to work even if the library author publishes breaking changes later.

Global Functions

Below is a list of all global functions. By “global”, we mean these functions do not require a preceding namespace - so you can call them directly, unlike other functions.

print

Function

Prints text to game's console.

Arguments

Name
Type
Description

Example


error

Function

Prints an error text to game's console, and shuts down the script. Try to avoid using this function - use it only if an error happens which you can't recover from.

Arguments

Name
Type
Description

Example

global_vars_t

Usage:

game.global_vars.{field}

Usage: game.global_vars.{field}

An instance of this type provides a way to read several global variables that are used by the game. Changing any of the values is not and will never be supported.

real_time

Field

Type: float

Time passed since the game start, in seconds.


frame_count

Field

Type: int

Amount of frames rendered since the game start.


abs_frame_time

Field

Type: float

Absolute (averaged) frame time. It is calculated over a set of previous frame times, and should not be used for anything that requires accurate frame time like animation.


max_clients

Field

Type: int

Maximum amount of clients on the current server.


ticks_this_frame

Field

Type: int

Amount of ticks passed during the currently rendered frame. Any value above 1 might indicate a stall during rendering.


frame_time

Field

Type: float

Time, in which a previous frame was rendered. May be used for animation or by any other means that require accurate frame time.


cur_time

Field

Type: float

Time passed since the server's game start. This does not indicate the accurate time on the server, although in several events it might be synced by the software.


tick_fraction

Field

Type: float

Current tick's fractional value.


tick_count

Field

Type: int

Ticks passed since the server's game start.


map_path

Field

Type: string

Relative path to current loaded map's file.


map_name

Field

Type: string

Name of the currently loaded map.

ccsgo_input

Usage: game.input.{field_or_method}

This type represents the game's command input system.

in_third_person

FieldRead only

Type: bool

true if currently in the third person.


get_view_angles

Method

Returns current camera view angles.

Arguments

None.

Returns

Type
Description

Example


set_view_angles

Method

Sets new camera view angles.

Arguments

Name
Type
Description

Returns

Nothing.

Example

cinput_system

Usage: game.input_system:{method}

This type represents the game's control input system.

vk_to_button_code

Method

Converts a virtual key to button code.

Arguments

Name
Type
Description

Returns

Type
Description

Example

ccvar

Usage:

Usage: game.cvar:{method}

This type represents the game's cvar system.

find

Method

Get the game's cvar under this name.

Arguments

Returns

Example

mods

Usage: mods.{mod_name}

This table exposes several mods (short for Module, not Modification), that Fatality uses to operate.

events

Field

Type:

Event manager. Use this mod if you want to listen to more in-game events.

Adapter

This type represents a rendering adapter used within the rendering system.

get_back_buffer

Returns a back buffer texture. May return a blank or outdated texture, if the back buffer texture was not updated.

Arguments

None.

Returns

Example


get_back_buffer_downsampled

Returns a 4x down sampled version of the back buffer texture.

Arguments

None.

Returns

Example


get_shared_texture

Returns a shared texture. This texture usually replicates the down sampled back buffer texture, although it is updated automatically ONCE before the rendering on the layer starts.

Arguments

None.

Returns

Example

Managed

This type represents a managed object. You cannot create an instance of this type directly.

Every object, that inherits from this type, must be created before use. The rendering system will only create them automatically, if you happen to lose a device object (e.g. minimize the game window, and then restore it) and only if you add your objects to manage table in .

obj

Type:

Pointer to a GPU object. If this object is not created, this field will be nil. You can use the value of this field to pass it to directly for example, or if you (for whatever reason we don't recommend you doing) want to have a direct control over the pointer - cast it to FFI's cdata.


create

Creates a managed object in GPU memory.

You should create() an object only once. Invoking this method after the object was created will be meaningless.

Arguments

None.

Returns

Nothing.

Example


destroy

Destroys a managed object in GPU memory.

Never destroy a GPU object if it is being used in rendering (for example, when you have pushed some shape that uses a texture, and then destroyed that texture). This will lead to undefined behavior, and most likely, **crash the game **.

Arguments

None.

Returns

Nothing.

Example

svg_texture

This type represents an SVG texture object.

This type inherits type. All of its base methods and fields are also available in this type.

Passing invalid SVG data to the constructor will cause a crash. We will fix this issue in future updates.

__call

Constructs an SVG texture.

Arguments

Returns

Example

control_id

This type represents a control ID.

__call

Constructs the ID structure.

Arguments

Returns

Example


id

Type: int

Hashed representation of the ID.


id_string

Type: string

Normal representation of the ID.

user_t

This type represents basic user information.

avatar

Type:

User's avatar. May be nil.


username

Type: string

User's username.

entity_list_t

This type represents an entity list.

Never save any entities you get from this list if you don't know what you are doing! You may be left with dangling pointers, which will inevitably lead to a crash.

for_each

Loops the entities.

Arguments

Returns

Nothing.

Example


for_each_z

Loops the entities in the reverse order.

Arguments

Returns

Nothing.

Example

ccsweapon_base_vdata

This type represents a weapon's static data.

__index

Attemps to search for a field in this class.

Arguments

Returns

Example

...

...

Values to print in the console.

print('Hello world!', 123); -- prints out "Hello world! 123" to the console

text

string

Read print for documentation.

error('Can't recover from this one! Error: ' .. tostring(123));

vector

View angles.

local ang = game.input:get_view_angles();

ang

vector

View angles.

game.input:set_view_angles(math.vec3(0, 0, 0));

vk

int

Virtual key.

int

Button code.

local button = game.input_system:vk_to_button_code(0x41); -- 'A'

Name

Type

Description

name

string

Var name.

Type

Description

convar

Convar object.

local sv_quantize_movement_input = game.cvar:find('sv_quantize_movement_input')
if not sv_quantize_movement_input then
    error('sv_quantize_movement_input not found')
end

Type

Description

ptr

Back buffer texture pointer.

local bb = adapter:get_back_buffer();

Type

Description

ptr

Downsampled back buffer texture pointer.

local ds = adapter:get_back_buffer_downsampled();

Type

Description

ptr

Shared texture pointer.

local shared = adapter:get_shared_texture();

Name

Type

Description

id

string

ID.

Type

Description

control_id

ID structure.

local id = gui.control_id('my_id');

Name

Type

Description

fn

function(entity_entry_t)

Function callback.

entities.players:for_each(function (entry)
    -- ...
end);

Name

Type

Description

fn

function(entity_entry_t)

Function callback.

entities.players:for_each_z(function (entry)
    -- ...
end);

Name

Type

Description

name

string

Field name.

Type

Description

schema_accessor_t

Accessor instance.

local price = wpn_data.m_nPrice;
local price = wpn_data['m_nPrice']; -- this also works
Guidelines
Step By Step Guide

events_t
tex:create();
font:destroy();
draw
ptr
command

Name

Type

Description

sv

string

SVG text.

h

float

Target height. Defaults to 0, and 0 means that there will be no automatic downscale.

Type

Description

svg_texture

SVG texture object.

local lightning = draw.svg_texture([[
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9.55563 13.3232L9.43584 13.3123C7.90803 13.1735 7.14412 13.104 6.90146 12.5814C6.65881 12.0588 7.09869 11.4304 7.97846 10.1736L11.5612 5.05544C12.1424 4.22517 12.433 3.81003 12.6836 3.89831C12.9342 3.98658 12.9005 4.4922 12.8331 5.50343L12.6299 8.55194C12.5685 9.47214 12.5379 9.93224 12.8023 10.2419C13.0667 10.5515 13.5259 10.5933 14.4444 10.6768L14.5642 10.6877C16.092 10.8265 16.8559 10.896 17.0985 11.4186C17.3412 11.9412 16.9013 12.5696 16.0215 13.8264L12.4388 18.9446C11.8576 19.7748 11.567 20.19 11.3164 20.1017C11.0658 20.0134 11.0995 19.5078 11.1669 18.4966L11.3701 15.4481C11.4315 14.5279 11.4621 14.0678 11.1977 13.7581C10.9333 13.4485 10.4741 13.4067 9.55563 13.3232Z" fill="#ffffff"/>
<path d="M18.5 4L17 6H19L17.5 8" stroke="#ffffff" stroke-opacity="0.6" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M6.5 16L5 18H7L5.5 20" stroke="#ffffff" stroke-opacity="0.6" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
]], 24);
texture
texture?
Step By Step Guide

Guidelines

All items published on the Storefront must follow these guidelines to keep the Workshop safe, usable, and fair for everyone.

1. Provide meaningful descriptions

Your description should clearly explain what the item does, what it requires, and any limitations it may have. Do not use vague, misleading, or clickbait-style descriptions. End users should know exactly what they are getting before they subscribe to or purchase an item.

2. Maintain a minimum quality standard

Trivial one-line scripts, spam items, or submissions with no meaningful functionality are not allowed. All items must undergo basic quality assurance to ensure they work as described and do not pollute the Workshop with junk content.

3. Respect capability requests

Always use the provided APIs and tools in a way that respects user choice of permissions. Do not attempt to bypass or override capability restrictions. If your item does not need filesystem access, for example, you must not request it.

4. Practice fair market behavior

Artificial price dumping, manipulative pricing strategies, or exploitative sales tactics are not allowed. The Workshop should remain a healthy, competitive, and sustainable marketplace for all developers.

5. Do not publish malicious code

This includes malware, exploits, spyware, or any script designed to harm users or their systems. While beta branches exist for unverified testing, all items submitted to live must be safe and secure. Any attempt to sneak in harmful code will result in removal and possible bans.

6. Ensure compatibility with existing features

Scripts and configs must not intentionally disrupt core software features, other Workshop items, or the overall stability of the platform. If your item modifies functionality, it must do so safely and predictably.

7. Keep content respectful

Item names, descriptions, scripts, and configs must not contain harassment, hate speech, targeted attacks, or inappropriate material. All content must follow the same standards as the forum and community guidelines.

8. Maintain and update your items

If your script or config breaks due to updates in the core software or APIs, you are responsible for updating it. If you choose to stop maintaining an item, you must clearly mark it as deprecated so users are not misled.

9. Be transparent with monetization

Paid items must disclose exactly what features are included. You may not hide critical functionality behind unexpected paywalls or release crippled versions that require additional payment to work as advertised.

10. Respect licensing and attribution

If your item uses external code, libraries, or assets, you are responsible for ensuring that you follow their licensing terms. Proper credit must be given where required, and you may not repackage or sell work you do not have rights to.

event_t

Event usertype. An instance of this type can be found in events.

add

Method

Adds a callback to the event.

Arguments

Name
Type
Description

fn

function

Callback function. Arguments that are accepted by the function are dictated by the event instance.

Returns

Nothing.

Example

events.present_queue:add(function ()
    -- will be called every time game queues a frame for rendering
end);

remove

Method

Removes a callback from the event.

Arguments

Name
Type
Description

fn

function

Callback function, that was earlier passed to the add() function.

Returns

Nothing.

Example

local function on_present()
    if some_condition then
        events.present_queue:remove(on_present)
    end
end

events.present_queue:add(on_present)

entity_entry_t

Represents an entity entry.

entity

Type: <type>

Entity instance. Type depends on the list you get it from.


had_dataupdate

Type: bool

true if the client had received any updates to this entity at least once.


handle

Type: chandle<type>

Entity's handle. You may store this elsewhere if you need to have global access to an entity.


avatar

Type: texture

This field is only available on entries that use cs2_player_controller type.

Player's profile picture. Will be nil if was yet to be initialized.

glyph_t

This type represents a glyph object.

codepoint

Type: int

Character codepoint.


size

Type: vec2

Glyph dimensions.


offset

Type: vec2

Glyph offset.


uv

Type: rect

UV rect on the texture atlas.

events_t

Usage: mods.events.{method}

This module lets you manage custom in-game event listener.

Please note that the game server knows which events you are listening to. Internally, we only listen to events that will get sent to the client anyway in one way or another. If you decide to listen to something the server generally does not expect, it may cause issues on official servers.

add_listener

Method

Adds a game event to the listener.

Internally we listen to the following events:

  • bullet_impact

  • weapon_fire

  • bomb_beginplant

  • bomb_abortplant

  • bomb_planted

  • bomb_defused

  • bomb_exploded

  • round_start

  • game_newmap

  • map_shutdown

Adding those events to the listener is not needed.

Arguments

Name
Type
Description

name

string

Event name.

Returns

Nothing.

Example

mods.events:add_listener('round_end');

schema_accessor_t

This type represents a special structure that references a certain field in the entity object.

You can check the returned type by using type() function.

Do not ever store an instance of this type anywhere but in a scope of an event because entity might be removed.

get

Returns the value.

Arguments

None.

Returns

Type

Description

<type>

Value.

Example

local health = player.m_iHealth:get();

set


Sets the value.

Arguments

Name

Type

Description

value

<type>

Value.

Returns

Nothing.

Example

player.m_iHealth:set(50); -- won't really do anything with the health

font_flags

This enum determines which flags a font object should possess. Setting those flags is only possible during type construction.


shadow

Adds a 1px shadow to font glyphs.


outline

Adds a 1px outline to font glyphs.


anti_alias

Enable antialiasing on font glyphs. This flag only works on GDI fonts.


no_dpi

Disable DPI scaling on this font. By default, font glyphs will be scaled in accordance to the global DPI scale.


no_kern

Disable glyph kerning on this font.


mono

Enables a strong hinting algorithm for rasterization. Only works on FreeType fonts.


light

Enables a light hinting algorithm for rasterization. Only works on FreeType fonts.

chandle

This type represents an entity handle.

You can also compare this type using a == operator.

get

Returns the entity, or nil if nothing found.

Arguments

None.

Returns

Type

Description

<type>

Entity instance.

Example

local ent = handle:get();

valid

Returns true if the handle is valid.

Arguments

None.

Returns

Type

Description

bool

true if valid.

Example

if handle:valid() then
    -- ...
end

is_clientside

Returns true if the handle links to a client-side entity.

Arguments

None.

Returns

Type

Description

bool

true if client-sided.

Example

if handle:is_clientside() then
    -- ...
end

mouse_button

This enum represents mouse buttons.

left

Left mouse button.


right

Right mouse button.


middle

Middle (scroll wheel) mouse button


back

"Back" mouse button (side button 1).


forward

"Forward" mouse button (side button 2).

observer_mode_t

This enum represents the observer modes available in the game.


none

Represents no observer mode (not spectating anyone).


fixed

Represents a fixed camera position.


in_eye

Represents observing from the perspective of the player being spectated.


chase

Represents a chase camera that follows the player being spectated.


roaming

Represents a free-roaming camera.


directed

Represents an automatically directed camera, typically controlled by the game or server.

csweapon_category

This enum represents the category classification for weapons in the game.

other

Represents weapons or items that don't fit into any specific category.


melee

Represents melee weapons, such as knives or other close-combat tools.


secondary

Represents secondary weapons, such as pistols.


smg

Represents submachine guns (SMGs).


rifle

Represents rifles, including assault rifles and sniper rifles.


heavy

Represents heavy weapons, such as machine guns and shotguns.

context

This type represents the GUI context.

find

Finds a control by ID.

Arguments

Name

Type

Description

id

string

Control ID.

Returns

Type

Description

<control>?

Casted control. Returns nil if the control was not found, or casting failed.

Example

local some_cb = ctx:find('some_cb');

user

Field

Type: user_t

User's basic information.

Upload a build

Adding UI

Adding UI

Now that you know the basics, let’s extend our script by allowing the user to toggle the text. We can do this by adding a control to the menu.

Creating a control

Let’s start by creating a simple checkbox:

local cb = gui.checkbox(gui.control_id('my_checkbox'));

Each control has a unique ID, which the UI framework uses to distinguish controls within containers. It’s very important that your control’s ID doesn’t conflict with others, as that could result in a broken state or worse.

To create the ID, call gui.control_id and pass the desired ID.

Then, create the checkbox by calling gui.checkbox and passing the ID structure you've created.

Constructing the row

By default, controls are typically placed in rows - layouts that stack elements in a specific manner. We provide a simple helper function - gui.make_control.

local row = gui.make_control('My checkbox', cb);

Adding the row to a group

With the control and row ready, let’s add them to a group.

To view group and control IDs, you can enable Debug mode in the SCRIPTS tab.

In this example, we'll use the lua>elements a group. First, locate that group in the global context:

local group = gui.ctx:find('lua>elements a');

Then call its add method to include your row:

group:add(row);

That's it!

It is very important to call reset() method if you add multiple controls, so the layout will stack everything correctly.

Using the value

Next, let’s modify our previous script so the text only appears if the checkbox is checked. Wrap your drawing code in an if statement before rendering the text:

if cb:get_value():get() then

and close it after.

The final script should look something like this:

local cb = gui.checkbox(gui.control_id('my_checkbox'));
local row = gui.make_control('My checkbox', cb);
local group = gui.ctx:find('lua>elements a');
group:add(row);

local function on_present_queue()
    if cb:get_value():get() then
        local d = draw.surface;
        d.font = draw.fonts['gui_main'];
        d:add_text(draw.vec2(50, 50),
            'Hello drawing! My first script speaking.',
            draw.color.white()
        );
    end
end

events.present_queue:add(on_present_queue);

And here's the result:

notification

This type represents a notification item.

__call

Constructs the notification.

Arguments

Name

Type

Description

hdr

string

Header (title).

txt

string

Text (body).

ico

Icon. Defaults to nil.

Returns

Type

Description

notification

Notification object.

Example

local notif = gui.notification('Hello', 'Lua works!');

notification_system

This type represents a notification system.

add

Adds a notification to the list.

Arguments

Name

Type

Description

notif

Notification object.

Returns

Nothing.

Example

notif:add(my_notification);

button

This type represents a button control.

This type inherits control type. All of its base methods and fields are also available in this type.

__call

Constructs the button.

Arguments

Name

Type

Description

id

Control ID.

str

string

Text string.

Returns

Type

Description

button

Button object.

Example

local btn = gui.button(id, 'Hello!');

selectable

This type represents a selectable control.

This type inherits control type. All of its base methods and fields are also available in this type.

__call

Constructs the selectable.

Arguments

Name

Type

Description

id

Control ID.

str

string

Text string.

Returns

Type

Description

selectable

Selectable object.

Example

local sel = gui.selectable(id, 'Hello!');

Step By Step Guide

In this tutorial you’ll create and publish a script to the Storefront. The same flow applies to Libraries and Configs.

Create the item

Go to Workshop -> Manage Items and click Create new item.

Fill out:

  • Title

  • Game (the supported title your script targets)

  • Item type (Script / Library / Config)

Warning: You cannot change the item type later.

Upload a build

Open the Builds tab and click Upload new build.

Fill out:

  • Version (use semantic versioning like 1.0.0 if possible)

  • Changelog (short, factual)

  • File upload (your .lua file or a .zip)

Note: You can upload a ZIP to bundle assets alongside the script. See

Click Save. The build is created in the Draft state.

Click Submit for review. The build state changes to Under review.

After moderation approves it, you’ll get a notification and the state changes to Approved.

Click Set to branch and choose Default.

This makes the approved build the version users receive when they add your script to their library.

Tip: Use a Beta branch to test new builds with a subset of users before moving them to Default. See

Configure capabilities

If your script needs restricted APIs (e.g. FFI, filesystem, clipboard), enable the required Capabilities so users can grant permission.

In Builds -> Capabilities (right side), select only what you need and click Save.

Best practice: Request the minimum capabilities your script actually uses. Users will see and approve these.

Prepare the Storefront listing

Open the General tab and complete all fields in the Release Checklist.

When the checklist is complete, click Submit for review on the item. After moderation approves it, the item is automatically published on the Storefront and users can purchase or subscribe.

font_gdi

This type represents a font object. Internally, this type uses GDI library to rasterize font glyphs.

This type inherits type. All of its base methods and fields are also available in this type.

__call

Constructs a font object.

Arguments

Returns

Example

label

This type represents a label control.

This type inherits type. All of its base methods and fields are also available in this type.

__call

Constructs the label.

Arguments

Returns

Example


set_text

Sets the new text.

Arguments

Returns

Nothing.

Example

cs2_grenade_projectile

This type represents a grenade projectile.

This type inherits type. All of its base methods and fields are also available in this type.

get_abs_origin

Returns the absolute origin (the one that is used for rendering).

Arguments

None.

Returns

Example


get_grenade_type

Returns the grenade type.

Arguments

None.

Returns

Example

image

This type represents an image control.

This type inherits type. All of its base methods and fields are also available in this type.

__call

Constructs the image.

Arguments

Returns

Example

text_input

This type represents a text input control.

This type inherits type. All of its base methods and fields are also available in this type.

__call

Constructs the text input.

Arguments

Returns

Example


placeholder

Type: string

Placeholder text.


value

Type: string

Value.


set_value

Sets the new text.

Arguments

Returns

Nothing.

Example

spacer

This type represents a spacer control.

This type inherits type. All of its base methods and fields are also available in this type.

__call

Constructs the spacer.

Arguments

Returns

Example

texture?
notification
control_id
control_id

Name

Type

Description

name

string

System font name (example: 'Arial').

size

float

Font height, in pixels.

fl

font_flags

Font flags. Use bit library to construct them. Defaults to 0.

mi

int

Starting codepoint. Defaults to 0.

ma

int

Ending codepoint. Defaults to 255 (entire ASCII code page).

weight

int

Font weight. Defaults to 400 (regular).

Type

Description

font_gdi

Font object.

local sys_font = draw.font_gdi('Calibri', 14);
font_base

Name

Type

Description

id

control_id

Control ID.

str

string

Label string.

col

color?

Label color. Defaults to nil.

bold

bool

Whether to use bold font. Defaults to false.

Type

Description

label

Label object.

local lab = gui.label(id, 'Hello!');

Name

Type

Description

str

string

New text.

lab:set_text('New hello!');
control

Type

Description

vector

Origin.

local org = wep:get_abs_origin();

Type

Description

int

Grenade type.

local type = gren:get_grenade_type();
base_entity

Name

Type

Description

id

control_id

ID.

tex

texture

Texture.

Type

Description

image

Image instance.

local img = gui.image(gui.control_id('my_id'));
control

Name

Type

Description

id

control_id

ID.

Type

Description

text_input

Text input instance.

local sp = gui.text_input(gui.control_id('my_id'));

Name

Type

Description

str

string

New value.

input:set_value('Hello!');
control

Name

Type

Description

id

control_id

ID.

Type

Description

spacer

Spacer instance.

local sp = gui.spacer(gui.control_id('my_id'));
control
Bundled Assets
Branches

glow_parts

This enum is used to determine which parts of the glow around the shape should get rendered.

tl

Draw top-left corner.


tr

Draw top-right corner.


bl

Draw bottom-left corner.


br

Draw bottom-right corner.


t

Draw top line.


l

Draw left line.


r

Draw right line.


b

Draw bottom line.


all_left

Draw all the left side shapes. This includes both left corners and the line.


all_right

Draw all the right side shapes. This includes both right corners and the line.


all_top

Draw all the top side shapes. This includes both top corners and the line.


all_bottom

Draw all the bottom side shapes. This includes both bottom corners and the line.


all

Draw the entire glow around the shape.


no_bottom

Draw glow except for the bottom line.


no_top

Draw glow except for the top line.


no_right

Draw glow except for the right line.


no_left

Draw glow except for the left line.

accessor

accessor

Last modified: 03 January 2025

This type represents a safe way to access maps.

Note that <type> indicates the specific type this instance holds. accessor<texture> for example means that get will return an instance of texture, and set will only accept the type texture as it's obj parameter.

__index

Returns an object by key.

Arguments

Name

Type

Description

key

string

Object key.

Returns

Type

Description

<type>

Object.

Example

local main_font = draw.fonts['gui_main'];

-- this also works
local main_font_2 = draw.fonts.gui_main;

__newindex

Sets an object by key.

Arguments

Name

Type

Description

key

string

Object key.

obj

<type>

Object.

Returns

Nothing.

Example

draw.fonts['my_font'] = my_font;

-- this also works
draw.fonts.my_font = my_font;

value_param

This type represents a value data used by some control types.

Note, that this part: <type> is used to designate what exact type the instance of this type is holding. For example, when it says value_param<bool>, it means that get will return a bool value, and set will accept only the type bool as it's val parameter.

get

Returns the value.

Arguments

None.

Returns

Type

Description

<type>

Value.

Example

ctrl:get_value():get();

get_direct

Returns the value disrgarding any active keybinds.

Arguments

None.

Returns

Type

Description

<type>

Value.

Example

ctrl:get_value():get_direct();

set

Sets the value.

It is advised to use set_value method of the control, if any.

Arguments

Name

Type

Description

val

<type>

Value.

Returns

Nothing.

Example

ctrl:get_value():set(123);

get_hotkey_state

Returns true if there's any active hotkeys.

Arguments

None.

Returns

Type

Description

bool

true if any hotkey is active.

Example

if ctrl:get_value():get_hotkey_state() then
    -- ...
end

disable_hotkeys

Disables all active hotkeys. This allows you to override the value.

Arguments

None.

Returns

Nothing.

Example

ctrl:get_value():disable_hotkeys();

csweapon_type

This enum represents the weapon type in the game.

knife

Represents a knife-type weapon.


pistol

Represents a pistol-type weapon.


submachinegun

Represents a submachine gun-type weapon.


rifle

Represents a rifle-type weapon.


shotgun

Represents a shotgun-type weapon.


sniper_rifle

Represents a sniper rifle-type weapon.


machinegun

Represents a machine gun-type weapon.


c4

Represents a C4 explosive.


taser

Represents a taser weapon.


grenade

Represents a grenade-type weapon.


stackableitem

Represents a stackable item-type weapon.


fists

Represents fists as a weapon type.


breachcharge

Represents a breach charge-type weapon.


bumpmine

Represents a bump mine-type weapon.


tablet

Represents a tablet-type weapon.


melee

Represents a melee-type weapon.


shield

Represents a shield-type weapon.


zone_repulsor

Represents a zone repulsor-type weapon.


unknown

Represents an unknown weapon type.

cengine_client

Usage: game.engine:{method}

An instance of this type provides a way to interface with Source 2's Engine-to-Client service.

get_last_timestamp

Method

Returns last timestamp, in seconds.

Arguments

None.

Returns

Type
Description

float

Timestamp, in seconds.

Example

local last_time = game.engine:get_last_timestamp();

get_last_server_tick

Method

Returns last server tick number.

Arguments

None.

Returns

Type
Description

int

Server tick number.

Example

local server_tick = game.engine:get_last_server_tick();

in_game

Method

Returns whether the client is currently in game.

Arguments

None.

Returns

Type
Description

bool

In-game status.

Example

if game.engine:in_game() then
    print("I'm in game!");
end

is_connected

Method

Returns whether the client is currently connected to a game server.

Arguments

None.

Returns

Type
Description

bool

true if connected.

Example

if game.engine:is_connected() then
    print("I'm connected!");
end

get_netchan

Method

Returns the Network Channel used for network communication.

Arguments

None.

Returns

Type
Description

Network channel, or nil if does not exist.

Example

local chan = game.engine:get_netchan();

client_cmd

Method

Executes a client-sided console command.

Arguments

Name
Type
Description

cmd

string

Command to execute.

bool

unrestricted

Whether should the execution preserve any restrictions. Defaults to false.

Returns

Nothing.

Example

game.engine:client_cmd('say Hello!');

get_screen_size

Method

Returns client window screen size.

Arguments

None.

Returns

Type
Description

int

Width.

int

Height.

Example

local w, h = game.engine:get_screen_size();

entities

This table represents an internal entity list.

Never store any entities in the global scope! Any entity might get deleted, and you will no longer have a valid instance of that entity, which will inevitably lead to a crash. If you need to globally store an entity somewhere, we strongly recommend you store an instance of chandle, and use it's get method to retrieve the entity again, when needed.

players

Type: entity_list_t<cs2_player_pawn>

Player pawns.


controllers

Type: entity_list_t<cs2_player_controller>

Player controllers.


items

Type: entity_list_t<cs2_weapon_base>

Items (held).


dropped_items

Type: entity_list_t<cs2_weapon_base>

Dropped items.


projectiles

Type: entity_list_t<cs2_grenade_projectile>

Grenade projectiles.


get_local_pawn

Returns the local player's pawn.

Arguments

None.

Returns

Type

Description

Pawn.

Example

local lp = entities.get_local_pawn();

get_local_controller

Returns the local player's controller.

Arguments

None.

Returns

Type

Description

Controller.

Example

local lp_ctrl = entities.get_local_controller();

gui

Usage:

gui.{func_or_field}

Usage: gui.{func_or_field}

This table exposes the GUI system of the software.

All types and enums described in the child sections must be prefixed with gui..

ctx

Type: context

GUI context.


notify

Type: notification_system

Notification system.


input

Type: context_input

Input context.


make_control

Wraps a control into a layout consisting of a label and that specific control. You should add this new control to groupboxes if you want your control to be displayed nicely. Additionally, you can add any extra controls to the returned one - those will get stacked to the left side of your initial control.

Arguments

Name

Type

Description

text

string

Label value.

c

Control object.

Returns

Type

Description

Layout object.

Example

local row = gui.make_control('Hello checkbox!', my_cb);

checkbox

This type represents a checkbox control.

This type inherits control type. All of its base methods and fields are also available in this type.

__call

Constructs the checkbox.

Arguments

Name

Type

Description

id

ID.

Returns

Type

Description

checkbox

Checkbox instance.

Example

local cb = gui.checkbox(gui.control_id('my_id'));

get_value

Returns checkbox' value.

Arguments

None.

Returns

Type

Description

Value data.

Example

local val = cb:get_value():get();

set_value

Sets checkbox' value.

It is advised to use this method instead of value_param's set method.

Arguments

Name

Type

Description

val

bool

New value.

Returns

Nothing.

Example

cb:set_value(true);

container

This type represents an abstract container.

add

Adds a control to the container.

Arguments

Name

Type

Description

ctrl

Control to add.

Returns

Nothing.

Example

container:add(my_control);

remove

Removes a control from the container.

Arguments

Name

Type

Description

ctrl

Control to remove.

Returns

Nothing.

Example

container:remove(my_control);

find

Finds a control by ID.

Arguments

Name

Type

Description

id

string

Control ID.

Returns

Type

Description

<control>?

Casted control. Returns nil if the control was not found, or casting failed.

Example

local some_cb = container:find('some_cb');

color_picker

This type represents a color picker control.

This type inherits control type. All of its base methods and fields are also available in this type.

__call

Constructs the color picker.

Arguments

Name

Type

Description

id

Control ID.

allow_alpha

bool

Whether to enable alpha channel. Defaults to true.

Returns

Type

Description

color_picker

Color picker object.

Example

local picker = gui.color_picker(id);

get_value

Returns color picker' value.

Arguments

None.

Returns

Type

Description

Value data.

Example

local val = picker:get_value():get();

cnet_chan

Provides a way to interface with a Network Channel's class.

get_address

Method

If the current channel is null, this function will return nil instead.

Returns address string of the remote machine.

Arguments

None.

Returns

Example

is_loopback


Method

If the current channel is null, this function will return nil instead.

Returns whether the current channel is connected to the local machine (loopback address).

Arguments

None.

Returns

Example


is_null

Method

Returns whether the channel is stubbed.

Arguments

None.

Returns

Example


get_latency

Method

If the current channel is null, this function will return nil instead.

Returns current latency to the remote server (in seconds).

Arguments

None.

Returns

Example

font

This type represents a font object. Internally, this type uses FreeType library to rasterize font glyphs.

This type inherits type. All of its base methods and fields are also available in this type.

__call

Constructs a font object.

Passing an invalid pointer, a or memory region that is smaller than the size will result in a crash.

Arguments

1. From file.

1. From memory.

1. From memory, with codepoint pairs.

Returns

Example

base_entity

This type represents a base game entity.

This type may be returned for any other abstract entity class, but internally will point to the correct type.

__index

Function

Attemps to search for a field in this class.

Arguments

Returns

Example


get_class_name

Function

Returns schema class name.

Returns

Example


to_weapon_base_gun

Function

Safe-casts the entity to cs2_weapon_base_gun, returns nil if not a weapon_base_gun

Returns

Example


to_weapon_base

Function

Safe-casts the entity to cs2_weapon_base, returns nil if not a weapon_base

Returns

Example


to_player_pawn

Function

Safe-casts the entity to cs2_player_pawn, returns nil if not a player_pawn

Returns

Example


to_player_controller

Function

Safe-casts the entity to cs2_player_controller, returns nil if not a player_controller

Returns

Example

combo_box

This type represents a combo box control.

This type inherits type. All of its base methods and fields are also available in this type.

add method expects an instance of . Passing other control types will not add them to the list.

Value bits are toggled in order of selectables. That means if the first element is toggled, so will be the first bit, etc.

__call

Constructs the combo box.

Arguments

Returns

Example


allow_multiple

Type: bool

If set to true, the checkbox will be able to toggle multiple selectables.


get_value

Returns combo box' value.

Arguments

None.

Returns

Example

Type

Description

string?

IP-address or Steam Server Address.

local chan = game.engine:get_netchan();
if chan and not chan:is_null() then
    print(chan:get_address());
end

Type

Description

bool?

true if connected to the local machine.

local chan = game.engine:get_netchan();
if chan and not chan:is_null() and chan:is_loopback() then
    print('Connected to localhost!');
end

Type

Description

bool

true if current channel is a dummy channel.

local chan = game.engine:get_netchan();
if not chan or chan:is_null() then
    print('Not connected!');
end

Type

Description

float?

Latency (in seconds).

local chan = game.engine:get_netchan();
if chan and not chan:is_null() then
    print('Current latency: ' .. tostring(math.round(chan:get_latency() * 1000.0)) .. 'ms');
end

Name

Type

Description

name

string

Field name.

Type

Description

schema_accessor_t

Accessor instance or pointer accessor instance

local health = player.m_iHealth;
local health = player['m_iHealth']; -- this also works

Type

Description

string

Name. Returns nil when failed.

local name = entity:get_class_name()

Type

Description

cs2_weapon_base_gun?

Casted entity. Returns nil if the cast failed.

local gun = entity:to_weapon_base_gun()

Type

Description

cs2_weapon_base?

Casted entity. Returns nil if the cast failed.

local wpn = entity:to_weapon_base()

Type

Description

cs2_player_pawn?

Casted entity. Returns nil if the cast failed.

local pawn = entity:to_player_pawn()

Type

Description

cs2_player_controller?

Casted entity. Returns nil if the cast failed.

local controller = entity:to_player_controller()
cnet_chan
cs2_player_pawn
cs2_player_controller
control
layout
control_id
value_param<bool>
control
control
control_id
value_param<color>

Name

Type

Description

path

string

Path to a ttf/otf file.

size

float

Font height, in pixels.

fl

font_flags

Font flags. Use bit library to construct them. Defaults to 0.

mi

int

Starting codepoint. Defaults to 0.

ma

int

Ending codepoint. Defaults to 255 (entire ASCII code page).

Name

Type

Description

mem

ptr

Pointer to a font file in memory.

sz

int

Font file size, in bytes.

size

float

Font height, in pixels.

fl

font_flags

Font flags. Use bit library to construct them. Defaults to 0.

mi

int

Starting codepoint. Defaults to 0.

ma

int

Ending codepoint. Defaults to 255 (entire ASCII code page).

Name

Type

Description

mem

ptr

Pointer to a font file in memory.

sz

int

Font file size, in bytes.

size

float

Font height, in pixels.

fl

font_flags

Font flags. Use bit library to construct them. Defaults to 0.

pairs

table[{int, int}...]

Min/max pairs. This is a standard array, consisting of {int, int} pairs.

Type

Description

font

Font object.

local cool_font = draw.font('myfont.ttf', 16);
font_base

Name

Type

Description

id

control_id

ID.

Type

Description

combo_box

Combo box instance.

local cb = gui.combo_box(gui.control_id('my_id'));

Type

Description

value_param<bits>

Value data.

local val = cb:get_value():get();
control_container
selectable

control_type

This enum determines the current control's type.

You can only construct types that are listed below in the navigation, and only if those have a constructor.

default

Default control. You are very unlikely to ever stumble upon this type.


button

Button control.


checkbox

Checkbox control.


child_tab

Child tab control. Only possible to find within tab_layout controls.


color_picker

Color picker control.


combo_box

Combo box control.


control_container

Default control with a container. You are very unlikely to ever stumble upon this type.


group

Groupbox control.


hotkey

Hotkey input control.


hsv_slider

HSB slider (Saturation/Brightness box, Hue slider and Opacity slider).


label

Label control.


layout

Layout control.


list

Listbox control.


loading

Loading spinner.


notification_control

Notification item control. One of the types in the core UI framework, never actually used within Fatality.


popup

Basic popup window.


selectable

Basic selectable item.


slider

Slider item. This type doesn't tell the internal value type used.


spacer

Spacer control.


tab

Horizontal or vertical tab.


tabs_layout

A variant of layout that is used specifically to operate tabs.


weapon_tabs_layout

A variant of layout that is used specifically to operate weapon tabs.


text_input

Text input control.


toggle_button

A variant of button that looks like button, but works like a checkbox.


window

Basic window control.


widget

Basic widget control.


settings

Settings control.


image

Image control.

texture

This type represents a texture object.

This type inherits managed type. All of its base methods and fields are also available in this type.

Supported texture formats are:

  • JPEG (.jpg, .jpeg) - 12 bpc/arithmetic are not supported.

  • PNG (.png)

  • TGA (.tga)

  • BMP (.bmp) - 1 bpp and RLE variants are not supported.

  • PSD (.psd) - composited view only, no extra channels, 8/16 bpc

  • GIF (.gif) - only first frame, for animated gifs use animated_texture

  • HDR (.hdr)

  • PIC (.pic)

  • PNM (.pnm, .ppm, .pgm) - PPM and PGM are binary only

__call

Constructs an instance of this type.

Passing an invalid pointer, a or memory region that is smaller than the size will result in a crash.

Arguments

1. From file.

Name

Type

Description

path

string

Path to a valid texture file.

2. From memory.

Name

Type

Description

data

Pointer to texture file data in memory.

sz

int

Size of the texture file data.

3. From RGBA data.

Name

Type

Description

data

Pointer to RGBA data in memory.

w

int

Width.

h

int

Height (row count).

p

int

Pitch (row width). This is the amount of bytes per row.

Returns

Type

Description

texture

Texture object.

Example

local tex = draw.texture('funny_meme.png');

is_animated

Type: bool

Set to true if this is an instance of animated_texture.


get_size

Returns size of this texture.

Arguments

None.

Returns

Type

Description

Texture dimensions.

Example

local sz = tex:get_size();

cs2_weapon_base

This type represents a CCSWeaponBase entity.

This type inherits base_entity type. All of its base methods and fields are also available in this type.

get_abs_origin

Returns the absolute origin (the one that is used for rendering).

Arguments

None.

Returns

Type

Description

Origin.

Example

local org = wep:get_abs_origin();

get_id

Returns the weapon ID.

Arguments

None.

Returns

Type

Description

Weapon ID.

Example

local wep_id = wep:get_id();

get_type

Returns the weapon type.

Arguments

None.

Returns

Type

Description

Weapon type.

Example

local type = wep:get_type();

get_data

Returns the weapon static data.

Arguments

None.

Returns

Type

Description

Weapon data.

Example

local data = wep:get_data();

animated_texture

This type is an animated texture. This texture type only supports animated GIF types, and does not support APNG.

This type inherits texture type. All of its base methods and fields are also available in this type.

If you pass an unsupported type, it will instead work exactly like texture type, meaning controlling frames and looping will be meaningless.

Using this type for texture atlases is possible, although highly unrecommended. It will produce extra texture objects in memory, and overall will be much slower. Instead, it is advised to construct an actual texture atlas, use texture type, and use texture mapping.

__call

Constructs animated texture.

Passing an invalid pointer, a or memory region that is smaller than the size will result in a crash.

Arguments

1. From file.

Name

Type

Description

path

string

Path to the texture file.

2. From memory.

Name

Type

Description

data

Pointer to texture file data in memory.

sz

int

Size of the texture file data.

Returns

Type

Description

animated_texture

Animated texture instance.

Example

local gif = draw.animated_texture('funny_gif.gif');

should_loop

Type: bool

If set to false, will not loop the animation automatically. Defaults to true.


Reset loop to run from the first frame.

Arguments

None.

Returns

Nothing.

Example

gif:reset_loop();

set_frame

Set a specific frame on the animation. If looping is enabled, will continue the cycle from the passed frame. Otherwise, will display a specific frame of the animation.

Frame count starts from 0.

Arguments

Name

Type

Description

frame

int

Frame number. Invalid frame numbers will be clamped.

Returns

Nothing.

Example

gif:set_frame(5);

get_frame_count

Returns amount of frames in the animation.

Arguments

None.

Returns

Type

Description

int

Frame count.

Example

local frames = gif:get_frame_count();
gif:set_frame(frames - 2); -- set to the last frame

slider

This type represents a slider control.

This type inherits control type. All of its base methods and fields are also available in this type.

__call

Constructs the slider.

Arguments

Name

Type

Description

id

Control ID.

low

float

Minimum value.

high

float

Maximum value.

fmt

table[...]

Format. Defaults to {'%.0f'}.

step

float

Step value. Defaults to 1.0.

Format Table

Format table can either be a single string with the desired format, or multiple elements with different minimum actuators. You have to pass multiple values in the descendant order, starting from the highest value to the lowest value. min and add values are both optional, but it makes no sense to leave either of them out.

Formatting uses standard printf syntax. Documentation

Passing invalid format will lead to an undefined behavior.

1. Single Formatting.

Type

Description

string

Format string.

2. Multi Formatting.

Name

Type

Description

min

float?

Minimal value.

add

float?

Add step.

fmt

string

Format string.

Returns

Type

Description

slider

Slider object.

Example

local slider = gui.slider(id, 0, 100, {'%.0f%%'});

get_value

Returns slider' value.

Arguments

None.

Returns

Type

Description

Value data.

Example

local val = slider:get_value():get();

cs2_player_controller

This type represents a CCSPlayerController class.

This type inherits base_entity type. All of its base methods and fields are also available in this type.

is_enemy

Returns true if this player is an enemy to the local player.

Arguments

None.

Returns

Type

Description

bool

true if an enemy.

Example

if player:is_enemy() then
    -- ...
end

get_name

Returns the sanitized player name.

Arguments

None.

Returns

Type

Description

string

Player's name.

Example

local name = player:get_name();

get_pawn

Returns the pawn attached to this controller.

Arguments

None.

Returns

Type

Description

Pawn instance.

Example

local pawn = ctrl:get_pawn();

get_active_weapon

Returns the active weapon.

Arguments

None.

Returns

Type

Description

Weapon instance.

Example

local wep = player:get_active_weapon();

get_observer_pawn

Returns the observer pawn used for this controller.

Arguments

None.

Returns

Type

Description

Entity.

Example

local obs_pawn = ctrl:get_observer_pawn();

get_observer_target

Returns the pawn this controller is currently observing.

Arguments

None.

Returns

Type

Description

Entity.

Example

local obs = ctrl:get_observer_target();

get_observer_mode

Returns the current observer mode.

Arguments

None.

Returns

Type

Description

Observer mode.

Example

local mode = ctrl:get_observer_mode();

events

Usage: events.{event_name}

There are a number of events that Fatality provides to use in the API - from various hooks, to in-game events. Each event entry is an object of . This table documents events to be used by your scripts.

You are not required to remove events when your script unloads. It is done automatically by the API engine.

present_queue

Field

Invoked each time the game queues a frame for rendering. This is the only permitted location for drawing on screen.

Arguments

None.


frame_stage_notify

Field

Invoked every time the game progresses onto another frame stage. This event is called before the game handles a new frame stage.

Arguments

Name
Type
Description

render_start_pre

Field

Invoked every time game starts the scene rendering process. This event is called before the game's function runs.

Arguments

None.


render_start_post

Field

Invoked every time game starts scene rendering process. This event is called after the game's function runs.

Arguments

Name
Type
Description

setup_view_pre

Field

Invoked every time the game sets up the view. This event is called before the game's function runs.

Arguments

None.


setup_view_post

Field

Invoked every time the game sets up the view information. This event is called after the game's function runs.

You can retrieve the view information from game.view_render service.

Arguments

None.


override_view

Field

Invoked every time the game internally overrides view information. You are free to change whatever you like in the provided view setup.

Arguments


event

Field

Invoked every time a game event fires.

We do not listen to every single event that exists in the game. If you need something that we don't listen to, please use

Arguments

Name
Type
Description

handle_input

Field

Invoked every time the game processes mouse/controller input. This is a good place to alter mouse movement, if needed.

Arguments

Name
Type
Description

input

Field

Invoked every time the GUI processes input.

Arguments

Name
Type
Description

draw

Usage: draw.{func_or_field}

This table describes the rendering system of the software.

All types and enums described in the child sections must be prefixed with draw.. This is done so specific types are not confused with others, such as the separate color types present in rendering and the game.

adapter

FieldRead only

Type:

Rendering adapter.


frame_time

FieldRead only

Type: float

Rendering frame time. An alias to .


time

FieldRead only

Type: float

Time, in seconds. An alias to .


scale

FieldRead only

Type: float

Global DPI scale.


display

FieldRead only

Type:

Display area size (viewport dimensions). will return exactly the same values. Overriding any of this vector's values will lead to an undefined behavior.


textures

FieldRead only

Type:

A string to map of all managed textures. You can query and push textures with custom IDs. When you add a texture to this map, it will be automatically destroyed and recreated when required (such as when DX11 device gets lost).

Built-in textures:

  • gui_loading: loading spinner

  • gui_user_avatar: current user's profile picture. May be nil if you don't have any avatar set

  • gui_icon_up: up chevron

  • gui_icon_down: down chevron

  • gui_icon_copy: copy icon

  • gui_icon_paste: paste icon

  • gui_icon_add: add icon

  • gui_icon_search: search icon

  • gui_icon_settings: settings icon (a cogwheel)

  • gui_icon_bug: bug icon

  • gui_icon_key.N: keyboard/mouse key icons. Replace N with the char code of a required button

  • icon_rage: RAGE tab icon

  • icon_legit: LEGIT tab icon

  • icon_visuals: VISUALS tab icon

  • icon_misc: MISC tab icon

  • icon_scripts: LUA tab icon

  • icon_skins: SKINS tab icon

  • icon_cloud: cloud icon

  • icon_file: file icon

  • icon_refresh: refresh icon

  • icon_save: save icon

  • icon_configs: "Configs" popup icon

  • icon_keys: keyboard icon

  • icon_info: "About" popup icon

  • icon_close: close icon (cross)

  • icon_load: load icon

  • icon_import: import icon

  • icon_export: export icon

  • icon_delete: delete icon

  • icon_autoload: "Autoload" icon

  • icon_allow_insecure: "Allow insecure" icon

  • icon_cloud_upd: cloud update icon

  • player_texture: player preview texture


fonts

FieldRead only

Type:

A string to map of all managed fonts. You can query and push fonts with custom IDs. When you add a font to this map, it will be automatically destroyed and recreated when required (such as when DX11 device gets lost).

Built-in fonts:

  • gui_debug: Verdana, 13px

  • gui_title: Figtree ExtraBold, 23px

  • gui_main: Figtree Medium, 14px

  • gui_main_shadow: Figree Medium, 14px, with shadow

  • gui_main_fb: Segoe UI Semibold, 14px

  • gui_bold: Figtree ExtraBold, 14px

  • gui_bold_fb: Segoe UI Black, 14px

  • gui_semi_bold: Figtree SemiBold, 14px

  • gui_semi_bold_fb: Segoe UI Bold, 14px


shaders

FieldRead only

Type:

A string to map of all managed shader. You can query and push shader with custom IDs. When you add a shader to this map, it will be automatically destroyed and recreated when required (such as when DX11 device gets lost).

Build-in shaders:

  • blur_f: gaussian blur shader


surface

FieldRead only

Type:

The layer you can render on.

command

This type is used to change render command parameters.

Be cautious when changing stuff in an instance of this type. Passing invalid data to texture or frag_shader, or not restoring some changes after you're done drawing can lead to undefined behavior, and more likely, a crash. If you are not sure how to operate this type, take a look into examples.

texture

Type:

Texture pointer. You can get one from an instance of texture type by accessing obj field. Passing invalid data to this field WILL result in a crash. For a safer way, please use .


frag_shader

Type: Type:

Fragment shader (aka Pixel Shader in DirectX terms) pointer. You can get one from an instance of shader type by accessing obj field. Passing invalid data to this field WILL result in a crash. For a safer way, please use .


clip_rect

Type:

Clip rectangle used for scissor testing. If this is set to nil, will not clip anything.

It is advised to instead use layer's override_clip_rect method. While you can pass custom rect to this field, you will lose information about previous clip rects set before. Using that method will make sure to intersect the previous rect with the one you pass and produce a probably more expected result.


uv_rect

Type:

UV rect used for texture mapping. If this field is set to nil, will use 0, 0, 1, 1 rectangle to map the texture. You can learn more about texture mapping in the tutorial section.


alpha

Type: float

Global opacity override. Defaults to 1, but if you set anything else - will modulate opacity of every next shape you will render.


rotation

Type: float

Shape rotation. Not all shapes support this field. The value is set in degrees, not radians.


anti_alias

Type: bool

If set to true, will apply tesselation to shapes.

As of now, not every shape supports tesselation, but it is advised to have it enabled at all times anyway. It will produce much better result anyway.


ignore_scaling

Type: bool

If set to true, will ignore global DPI scale. This is set to true by default, but you are free to change it to false if you are trying to render some custom UI elements.


chained_call

Type: bool

Only useful when using shaders. If set to true, will not update back buffer texture. This can be used if you need the very same texture data, as when applying several shaders to the back buffer.

Please note that capturing back buffer is a rather slow operation. It is better to not capture it too often. Back buffer is automatically captured to the only layer you can use anyway, and it is better to use that one instead, to make sure rendering happens as fast as it is possible.


only_downsampled

Type: bool

If set to true, will capture back buffer (as long as chained_call is set to false). The name of this field is quite misleading due to the fact that in the CS:GO version of Fatality, it was used to configure if the rendering system should also downsample the captured backbuffer into another texture. In DirectX11, this operation is much faster, so it is done regardless.


capture_back_buffer

Type: bool

An alias to only_downsampled.


is_tile

Type: bool

If set to true, will use a separate texture sampler that supports tiling. By default, all textures are stretched, but if you enable this option - their tiling and stretch will be fully configurable by the uv_rect field.


mode

Type:

Rendering mode. You can read more about it in the type's documentation.


set_texture

Sets a texture in a safe manner.

Arguments

Returns

Nothing.

Example


set_shader

Sets a fragment shader in a safe manner.

Arguments

Returns

Nothing.

Example

ptr
ptr
vec2
vector
weapon_id
csweapon_type
ccsweapon_base_vdata
ptr
control_id
value_param<float>
cs2_player_pawn
cs2_weapon_base_gun
base_entity
base_entity
observer_mode_t

stage

client_frame_stage

Current frame stage.

setup

cview_setup

View setup information.

Name

Type

Description

setup

cview_setup

View setup information.

event

game_event_t

Game event.

type

input_type_t

Type of the input.

value

ref_holder_t<float>

Input value.

msg

int

System message. Documentation

w

int

WPARAM.

l

int

LPARAM.

event_t
mods.events

adapter
global_vars_t.frame_time
global_vars_t.real_time
vec2
cengine_client:get_screen_size
accessor<texture>
texture
accessor<font_base>
font_base
accessor<shader>
shader
layer

Name

Type

Description

tex

texture

Texture object.

cmd:set_texture(my_tex);

Name

Type

Description

sh

[shader]

Shader object.

cmd:set_shader(my_shader);
ptr
set_texture
ptr
set_shader
rect?
rect?
render_mode

shader

This type represents a shader. HLSL documentation

This type inherits managed type. All of its base methods and fields are also available in this type.

Only fragment shaders (aka Pixel Shaders) are supported.

Rendering system uses Shader Version 4 (ps_4_0).

HLSL structures

The constant buffer fields are the following:

Name

Type

Description

mvp

float4x4

Projection matrix.

tex

float2

Texture dimensions.

time

float

Render time (NOT the frame time).

alpha

float

Global opacity override.

The input fields are the following:

Name

Type

Description

pos

float4

Vertex position on screen (x,y,z over w). Register: SV_POSITION.

col

float4

Vertex color tint (r, g, b, a). Register: COLOR0.

uv

float2

UV coordinates (u, v). Register: TEXCOORD0.

The bound objects are the following:

Name

Type

Description

sampler0

sampler

Texture sampler.

texture0

Texture2D

Texture object.

Template:

cbuffer cb : register(b0) {
    float4x4 mvp;
    float2 tex;
    float time;
    float alpha;
};

struct PS_INPUT {
    float4 pos : SV_POSITION;
    float4 col : COLOR0;
    float2 uv : TEXCOORD0;
};

sampler sampler0;
Texture2D texture0;

__call

Constructs a shader.

Arguments

Name

Type

Description

src

string

Shader source code.

Returns

Type

Description

shader

Shader object.

Example

local blur = draw.shader([[

// define constant buffer.
cbuffer cb : register(b0) {
    float4x4 mvp;
    float2 tex;
    float time;
    float alpha;
};

// define input.
struct PS_INPUT {
    float4 pos : SV_POSITION;
    float4 col : COLOR0;
    float2 uv : TEXCOORD0;
};

// use texture sampler and texture.
sampler sampler0;
Texture2D texture0;

float4 main(PS_INPUT inp) : SV_Target {
    float radius = 2.0; // blur radius
    float2 inv_size = 1.0 / tex.xy; // inversed size of the texture
    float weight = 0.0; // total weight
    float4 color = 0.0; // total color

    // perform a gaussian blur
    for (float x = -radius; x <= radius; x += 1.0)
    {
        for (float y = -radius; y <= radius; y += 1.0)
        {
            float2 coord = inp.uv + float2(x, y) * inv_size;
            color += texture0.Sample(sampler0, coord) * exp(-((x * x + y * y) / (2.0 * radius * radius)));
            weight += exp(-((x * x + y * y) / (2.0 * radius * radius)));
        }
    }

    // average the color
    color /= weight;
    color.a *= inp.col.a; // apply alpha modulation
    return color;
}
]]);

bits

This type represents a bitset value.

Maximal bit number for this type is 63. Setting or getting any bits outside of that range will cause a crash.

reset

Resets the value.

Arguments

None.

Returns

Nothing.

Example


get_raw

Returns the raw value.

Arguments

None.

Returns

Example


set_raw

Sets the raw value.

Arguments

Returns

Nothing.

Example


none

Returns true if no bits are set.

Arguments

None.

Returns

Example


set

Enables a bit.

Arguments

Returns

Nothing.

Example


unset

Disables a bit.

Arguments

Returns

Nothing.

Example


get

Returns bit state.

Arguments

Returns

Example


toggle

Toggles bit state.

Arguments

Returns

Nothing.

Example

control

This type represents an abstract GUI control.

id

Type: int

Control ID.


id_string

Type: string

String representation of control's ID. This may be empty for some controls.


is_visible

Type: bool

Control's visibility state.


parent

Type: control?

Parent control. Might be nil on some controls.


type

Type:

Control's type.


inactive

Type: bool

If set to true, will mark this control to the inactive state.


inactive_text

Type: string

Tooltip replacement to show when control is inactive.


inactive_color

Type:

Label color override for inactive controls.


tooltip

Type: string

Tooltip text.


aliases

Type: table[string]

Alias list for this control. Used in search box to support different naming (e.g. if a user searches for "Double tap", will find "Rapid fire" instead).


get_hotkey_state

Returns true if any of the control's hotkeys are active.

Arguments

None.

Returns

Example


set_visible

Changes visibility state for this control.

Calling this method on controls that are located in layouts with large amount of other controls will inevitably cause performance issues due to auto-stacking.

Arguments

Returns

Nothing.

Example


add_callback

Adds a callback to this control.

Arguments

Returns

Nothing.

Example


cast

Attempts to downcast the control to the correct type.

Due to Lua engine's limitations, it is impossible to automatically downcast variables. Usually there is no need to call this method, unless you found some control that wasn't somehow already cast to the desired type. find() methods automatically perform the cast to the correct type.

Arguments

None.

Returns

Example


reset

Resets control's state. This action is usually required if you change control's value directly by interacting with .

You also should call this method on layouts if you add multiple controls into them.

Arguments

None.

Returns

Nothing.

Example

bits:reset();

Type

Description

int

Raw value.

local raw = bits:get_raw();

Name

Type

Description

val

int

Raw value.

bits:set_raw(long_long_value);

Type

Description

bool

true if no bits are set.

if bits:none() then
    -- ...
end

Name

Type

Description

bit

int

Bit number.

bits:set(5); -- set bit #5 (same as bit.bor(val, bit.lshift(1, 5)))

Name

Type

Description

bit

int

Bit number.

bits:unset(5);

Name

Type

Description

bit

int

Bit number.

Type

Description

bool

Bit status.

if bits:get(5) then
    -- ...
end

Name

Type

Description

bit

int

Bit number.

bits:toggle(5);

Type

Description

bool

true if any hotkey is active.

if ctrl:get_hotkey_state() then
    -- ...
end

Name

Type

Description

val

bool

Visibility state.

ctrl:set_visible(false);

Name

Type

Description

cbk

function

Callback.

ctrl:add_callback(function ()
    print('Callback invoked!');
end);

Type

Description

<control>

New type, if any.

local checkbox = maybe_checkbox:cast();
ctrl:reset();
control_type
color
value_param

vec2

__call

Creates a new 2D vector instance.

Arguments

1. Default vector (0, 0).

None.

2. Single value.

Name

Type

Description

value

float

X and Y coordinates.

3. XY values.

Name

Type

Description

x

float

X coordinate.

y

float

Y coordinate.

Returns

Type

Description

vec2

New vector.

Example

local vec = draw.vec2(5, 10);

x

Type: float

X coordinate.


y

Type: float

Y coordinate.


floor

Returns floored variant of this vector.

Arguments

None.

Returns

Type

Description

vec2

Floored variant.

Example

local fl = vec:floor();

Returns ceiled variant of this vector.

Arguments

None.

Returns

Type

Description

vec2

Ceiled variant.

Example

local ceiled = vec:ceil();

round

Returns rounded variant of this vector.

Arguments

None.

Returns

Type

Description

vec2

Rounded variant.

Example

local rounded = vec:round();

len

Returns length of this vector.

Arguments

None.

Returns

Type

Description

float

Length.

Example

local len = vec:len();

len_sqr

Returns squared length of this vector.

This method is de-facto faster than the non-squared variant. Use it, if you need extra performance.

Arguments

None.

Returns

Type

Description

float

Length.

Example

local len = vec:len_sqr();

dist

Returns distance to another vector.

Arguments

Name

Type

Description

other

vec2

Other vector.

Returns

Type

Description

float

Distance.

Example

local dist = vec1:dist(vec2);

dist_sqr

Returns squared distance to another vector.

This method is de-facto faster than the non-squared variant. Use it, if you need extra performance.

Arguments

Name

Type

Description

other

vec2

Other vector.

Returns

Type

Description

float

Distance.

Example

local dist = vec1:dist_sqr(vec2);

cs2_weapon_base_gun

This type represents a CCSWeaponBaseGun class.

This type inherits base_entity type. All of its base methods and fields are also available in this type.

get_abs_origin

Returns the absolute origin (the one that is used for rendering).

Arguments

None.

Returns

Type

Description

Origin.

Example

local org = wep:get_abs_origin();

get_max_speed

Returns the maximal player speed when holding this weapon.

Arguments

None.

Returns

Type

Description

float

Max speed, in UPS.

Example

local spd = wep:get_max_speed();

get_inaccuracy

Returns the current inaccuracy value.

Arguments

Name

Type

Description

mode

Weapon mode.

Returns

Type

Description

float

Inaccuracy value.

Example

local inacc = wep:get_inaccuracy(csweapon_mode.primary_mode);

get_spread

Returns the current spread value.

Arguments

Name

Type

Description

mode

Weapon mode.

Returns

Type

Description

float

Inaccuracy value.

Example

local spread = wep:get_spread(csweapon_mode.primary_mode);

get_id

Returns the weapon ID.

Arguments

None.

Returns

Type

Description

Weapon ID.

Example

local wep_id = wep:get_id();

get_type

Returns the weapon type.

Arguments

None.

Returns

Type

Description

Weapon type.

Example

local type = wep:get_type();

get_data

Returns the weapon static data.

Arguments

None.

Returns

Type

Description

Weapon data.

Example

local data = wep:get_data();

is_gun

Returns true if this weapon is a firearm.

Arguments

None.

Returns

Type

Description

bool

true if a firearm.

Example

if wep:is_gun() then
    -- ...
end

is_attackable

Returns true if you can attack with this weapon.

Arguments

None.

Returns

Type

Description

bool

true if can attack.

Example

if wep:is_attackable() then
    -- ...
end

has_secondary_attack

Returns true if this weapon has a secondary attack mode.

Arguments

None.

Returns

Type

Description

bool

true if has the secondary attack mode.

Example

if wep:has_secondary_attack() then
    -- ...
end

has_spread

Returns true if this weapon has spread (e.g. knives do not have any spread).

Arguments

None.

Returns

Type

Description

bool

true if has spread.

Example

if wep:has_spread() then
    -- ...
end

text_params

This type is used to determine text alignment.

Line alignment only makes sense if you have multiple lines in your text. By default, all next lines will start from the left side of the text. You can change this behavior by using one of the functions that take line as a parameter. For example, if you pass right to the line alignment, all next lines will start from the right side. Text alignment will remain as dictated by v and h parameters.

with_v

Creates text_params instance with vertical alignment.

Arguments

Name

Type

Description

v

Vertical alignment.

Returns

Type

Description

text_params

Created text params.

Example

local align_top = draw.text_params.with_v(draw.text_alignment.top);

with_h

Creates text_params instance with horizontal alignment.

Arguments

Name

Type

Description

h

Horizontal alignment.

Returns

Type

Description

text_params

Created text params.

Example

local align_right = draw.text_params.with_h(draw.text_alignment.right);

with_line

Creates text_params instance with line alignment.

Arguments

Name

Type

Description

line

Line alignment.

Returns

Type

Description

text_params

Created text params.

Example

local lines_center = draw.text_params.with_line(draw.text_alignment.center);

with_vh

Creates text_params instance with vertical and horizontal alignments.

Arguments

Name

Type

Description

v

Vertical alignment.

h

Horizontal alignment.

Returns

Type

Description

text_params

Created text params.

Example

local align_bottom_right = draw.text_params.with_vh(draw.text_alignment.bottom, draw.text_alignment.right);

with_vline

Creates text_params instance with vertical alignment and line alignment.

Arguments

Name

Type

Description

v

Vertical alignment.

line

Line alignment.

Returns

Type

Description

text_params

Created text params.

Example

local align = draw.text_params.with_vline(draw.text_alignment.bottom, draw.text_alignment.center);

with_hline

Creates text_params instance with horizontal alignment and line alignment.

Arguments

Name

Type

Description

h

Horizontal alignment.

line

Line alignment.

Returns

Type

Description

text_params

Created text params.

Example

local align = draw.text_params.with_hline(draw.text_alignment.center, draw.text_alignment.center);

with_vhline

Creates text_params instance with vertical, horizontal and line alignments.

Arguments

Name

Type

Description

v

Vertical alignment.

h

Horizontal alignment.

line

Line alignment.

Returns

Type

Description

text_params

Created text params.

Example

local align = draw.text_params.with_vhline(draw.text_alignment.center, draw.text_alignment.center, draw.text_alignment.center);

cs2_player_pawn

This type represents a C_CSPlayerPawn class.

This type inherits type. All of its base methods and fields are also available in this type.

should_draw

Returns true if the game will draw this player on screen.

Arguments

None.

Returns

Example


is_left_handed

Returns true if left-hand mode is enabled.

Arguments

None.

Returns

Example


get_abs_origin

Returns the absolute origin (the one that is used for rendering).

Arguments

None.

Returns

Example


get_abs_angles

Returns the absolute angles (the one that is used for rendering).

Arguments

None.

Returns

Example


get_abs_velocity

Method

Returns the absolute velocity.

Arguments

None.

Returns

Example


set_abs_origin

Sets the new absolute origin.

Arguments

Returns

Nothing.

Example


set_abs_angles

Sets new absolute angles.

Arguments

Returns

Nothing.

Example


set_abs_velocity

Method

Sets new absolute velocity.

Arguments

Returns

Nothing.

Example


is_alive

Returns true if the player is alive.

Arguments

None.

Returns

Example


is_enemy

Returns true if this player is an enemy to the local player.

Arguments

None.

Returns

Example


is_enemy_to

Returns whether this player is an enemy to another entity.

Arguments

Returns

Example


get_active_weapon

Returns the active weapon.

Arguments

None.

Returns

Example


get_name

Returns the sanitized player name.

Arguments

None.

Returns

Example


get_view_offset

Returns the player's view offset (eye location relative to the player's origin).

Arguments

None.

Returns

Example


get_eye_pos

Returns the player's eye position.

Arguments

None.

Returns

Example

vector
csweapon_mode
csweapon_mode
weapon_id
csweapon_type
ccsweapon_base_vdata
text_alignment
text_alignment
text_alignment
text_alignment
text_alignment
text_alignment
text_alignment
text_alignment
text_alignment
text_alignment
text_alignment
text_alignment

Type

Description

bool

true if will.

if player:should_draw() then
    -- ...
end

Type

Description

bool

true if left-handed.

if player:is_left_handed() then
    -- ...
end

Type

Description

vector

Origin.

local org = player:get_abs_origin();

Type

Description

vector

Angles.

local ang = player:get_abs_angles();

Type

Description

vector

Velocity.

local vel = player:get_abs_velocity();

Name

Type

Description

vec

vector

New origin.

player:set_abs_origin(my_vec);

Name

Type

Description

ang

vector

New angles.

player:set_abs_angles(my_ang);

Name

Type

Description

vel

vector

New velocity.

player:set_abs_velocity(my_vel);

Type

Description

bool

true if alive.

if player:is_alive() then
    -- ...
end

Type

Description

bool

true if an enemy.

if player:is_enemy() then
    -- ...
end

Name

Type

Description

ent

base_entity

Other entity.

Type

Description

bool

true if an enemy.

if player:is_enemy_to(other_player) then
    -- ...
end

Type

Description

cs2_weapon_base_gun

Weapon instance.

local wep = player:get_active_weapon();

Type

Description

string

Player's name.

local name = player:get_name();

Type

Description

vector

View offset.

local vo = player:get_view_offset();

Type

Description

vector

Eye position.

local eyes = player:get_eye_pos();
base_entity

math

Usage: math.{func}

This table extends the existing math table that is a part of Lua.

calc_angle

Function

Calculates angles between 2 vectors.

Arguments

Name
Type
Description

src

Source vector.

dst

Destination vector.

Returns

Type
Description

Angles.

Example

local ang = math.calc_angle(vec1, vec2);

angle_normalize

Function

Normalizes an angle.

Arguments

Name
Type
Description

angle

float

Input angle.

Returns

Type
Description

float

Normalized angle.

Example

local norm = math.angle_normalize(560);

approach_angles

Function

Approaches an angle over time.

Arguments

Name
Type
Description

from

Start angle.

to

End angle.

speed

float

Approach speed.

Returns

Type
Description

Delta angle.

Example

local ang = math.approach_angles(from, to, 1.0 / game.global_vars.frametime);

edge_point

Function

Returns a point on the edge of a box.

Arguments

Name
Type
Description

mins

Box mins.

maxs

Box maxs.

dir

Point direction (angle).

radius

float

Area radius.

Returns

Type
Description

Point.

Example

local point = math.edge_point(mins, maxs, dir, 5);

lerp

Function

Linear interpolation.

Arguments

Name
Type
Description

t1

float

Start value.

t2

float

End value.

progress

float

Interpolation amount.

Returns

Type

Description

float

Interpolated value.

Example

local mid = math.lerp(0, 100, 0.5);

vector_angles

Function

Calculates angles from a vector.

Arguments

Name
Type
Description

forward

Source vector.

up

Up vector. Defaults to nil.

Returns

Type
Description

Angles.

Example

local ang = math.vector_angles(fw);

world_to_screen

Function

Transforms a point in the game world onto the viewport.

Arguments

Name
Type
Description

xyz

Point in the world.

round

bool

Whether should round the output. Defaults to true.

Returns

Type
Description

Point on the viewport.

Example

local point = math.world_to_screen(game_point);

clamp

Function

Clamps a value between min and max.

Arguments

Name
Type
Description

n

float

Value.

lower

float

Lowest value.

upper

float

Highest value.

Returns

Type
Description

float

Clamped value.

Example

local x = math.clamp(50, 5, 25); -- 25

remap_val

Function

Maps the value from one range to another range.

Arguments

Name
Type
Description

val

float

Value.

a

float

Lowest source value.

b

float

Highest source value.

c

float

Lowest destination value.

d

float

Highest destination value.

Returns

Type
Description

float

Mapped value.

Example

local mapped = math.remap_val(0.5, 0, 1, 0, 100); -- 50

remap_val_clamped

Function

Maps the value from one range to another range. Additionally, clamps the value based on the source range.

Arguments

Name
Type
Description

val

float

Value.

a

float

Lowest source value.

b

float

Highest source value.

c

float

Lowest destination value.

d

float

Highest destination value.

Returns

Type
Description

float

Mapped value.

Example

local mapped = math.remap_val_clamped(5, 0, 1, 0, 100); -- 100

vec2

Function

An alias to draw.vec2().

Example

local vec = math.vec2(5, 5);

vec3

Function

An alias to vector().

Example

local vec = math.vec3(5, 12, 5);

font_base

This type represents the base class for font types. You cannot create an instance of this type. Instead, use the children types.

This type inherits type. All of its base methods and fields are also available in this type.

Definitions:

  • codepoint: Unicode representation of the character.

  • kerning: a distance between two characters.

  • glyph: visual representation of a character.

height

Type: float

Font height, in pixels.


ascent

Type: float

Font ascent value, in pixels.


descent

Type: float

Font descent value, in pixels.


line_gap

Type: float

Font line gap, in pixels.


kerning_gap

Type: float

Font kerning gap, in pixels.


outline_alpha

Type: float

Font outline opacity (0 to 1). Defaults to 0.45.


flags

Type:

Font flags. Use bit library to read flags.


y_offset

Type: int

Glyph Y offset, in pixels. Will alter the location of a glyph in the atlas. Changing this value after the font was created is meaningless.


x_offset

Type: int

Glyph X offset, in pixels. Will alter the location of a glyph in the atlas. Changing this value after the font was created is meaningless.


fallback_font

Type: font_base

Fallback font to use, in case a glyph is not found in this font. Is it useful when one font does not have codepoints for specific symbols, that are present in another font, but you still want to prefer this font's glyphs over other font.


dropshadow_color

Type:

Shadow color. Only R, G, B values are used.


get_kerned_char_width

Returns character width, included with kerning.

Arguments

Returns

Example


get_kerning

Returns kerning value for a single character. If kerning is disabled, will instead return kerning gap.

Arguments

Returns

Example


get_text_size

Returns text area size.

Arguments

Returns

Example


wrap_text

Wraps text to meet the desired width. Wrapping is done by breaking text by words and inserting line breaks in between. If one of the words is longer than the target width, will instead use that word's width.

Arguments

Returns

Example


get_glyph

Returns glyph information for a character.

Arguments

Returns

Example


get_texture

Returns a texture atlas that contains the provided glyph.

Arguments

Returns

Example

vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vector
vec2

Name

Type

Description

left

int

Previous character codepoint.

right

int

Current character codepoint.

Type

Description

float

Distance, in pixels.

local w = font:get_kerned_char_width(prev_cp, cp);

Name

Type

Description

cp

int

Codepoint.

Type

Description

float

Kerning value, in pixels.

local k = font:get_kerning(cp);

Name

Type

Description

text

string

Text.

skip_scaling

bool

If set to true, will skip global DPI scaling. Defaults to false.

til_newline

bool

Calculate size only until a line break is met. Defaults to false.

Type

Description

vec2

Text area size.

local sz = font:get_text_size('Hello!');

Name

Type

Description

text

string

Text to wrap.

width

float

Target width.

Type

Description

string

Wrapped text.

local shorter = font:wrap_text('This is some very long text!', 50);

Name

Type

Description

codepoint

int

Codepoint.

Type

Description

glyph_t

Glyph information.

local glyph = font:get_glyph(cp);

Name

Type

Description

gl

glyph_t

Character glyph.

Type

Description

int

Texture pointer, or nil if not found.

local atlas = font:get_texture(glyph);
managed
font_flags
color

context_input

This type represents the GUI input context.

You can use cursor, is_mouse_up, is_mouse_down, is_key_up and is_key_down methods outside input context. Using other methods will not make any sense, as the information will be outdated.

cursor

Returns current cursor position.

Arguments

None.

Returns

Type

Description

Cursor position.

Example

local cur = gui.input:cursor();

cursor_prev

Returns previous cursor position.

Arguments

None.

Returns

Type

Description

Previous cursor position.

Example

local prev = gui.input:cursor_prev();

cursor_delta

Delta value between previous and current cursor positions.

Arguments

None.

Returns

Type

Description

Cursor delta.

Example

local delta = gui.input:cursor_delta();

did_cursor_move

Returns true if the cursor did move since the last input.

Arguments

None.

Returns

Type

Description

bool

true if moved.

Example

if gui.input:did_cursor_move() then
    -- ...
end

did_wheel_move

Returns true if mouse scroll wheel did move since the last input.

Arguments

None.

Returns

Type

Description

bool

true if moved.

Example

if gui.input:did_wheel_move() then
    -- ...
end


did_process_mouse

Returns true if any mouse key's state had changed.

Arguments

None.

Returns

Type

Description

bool

true if processed.

Example

if gui.input:did_process_mouse() then
    -- ...
end


button_released

Returns true if any key was released since the last input.

Arguments

None.

Returns

Type

Description

bool

true if released.

Example

if gui.input:button_released() then
    -- ...
end


wheel_delta

Returns the amount of rows scrolled this input.

Arguments

None.

Returns

Type

Description

float

Rows scrolled.

Example

local scroll = gui.input:wheel_delta();

is_mouse_up

Returns true if the mouse key is up (depressed).

Arguments

Name

Type

Description

mb

Mouse button.

Returns

Type

Description

bool

true if depressed.

Example

if gui.input:is_mouse_up(gui.mouse_button.left) then
    -- ...
end

is_mouse_down

Returns true if the mouse key is down (pressed).

Arguments

Name

Type

Description

mb

Mouse button.

Returns

Type

Description

bool

true if pressed.

Example

if gui.input:is_mouse_down(gui.mouse_button.left) then
    -- ...
end

is_mouse_clicked

Returns true if the mouse key is clicked (switched from depressed to pressed state).

Arguments

Name

Type

Description

mb

Mouse button.

Returns

Type

Description

bool

true if clicked.

Example

if gui.input:is_mouse_clicked(gui.mouse_button.left) then
    -- ...
end

is_mouse_released

Returns true if the mouse key is released (switched from pressed to depressed state).

Arguments

Name

Type

Description

mb

Mouse button.

Returns

Type

Description

bool

true if released.

Example

if gui.input:is_mouse_released(gui.mouse_button.left) then
    -- ...
end

did_process_key

Returns true if any key's state had changed.

Arguments

None.

Returns

Type

Description

bool

true if state changed.

Example

if gui.input:did_process_key() then
    -- ...
end

is_key_up

Returns true if a key is up (depressed).

Arguments

Name

Type

Description

k

int

Virtual key.

Returns

Type

Description

bool

true if depressed.

Example

if gui.input:is_key_up(0x41) then -- 0x41 = "A"
    -- ...
end

is_key_down

Returns true if a key is down (pressed).

Arguments

Name

Type

Description

k

int

Virtual key.

Returns

Type

Description

bool

true if pressed.

Example

if gui.input:is_key_down(0x41) then -- 0x41 = "A"
    -- ...
end

is_key_clicked

Returns true if a key is clicked (switched from depressed to pressed state).

Arguments

Name

Type

Description

k

int

Virtual key.

Returns

Type

Description

bool

true if clicked.

Example

if gui.input:is_key_clicked(0x41) then -- 0x41 = "A"
    -- ...
end

is_key_released

Returns true if a key is released (switched from pressed to depressed state).

Arguments

Name

Type

Description

k

int

Virtual key.

Returns

Type

Description

bool

true if released.

Example

if gui.input:is_key_released(0x41) then -- 0x41 = "A"
    -- ...
end
vec2
vec2
vec2
mouse_button
mouse_button
mouse_button
mouse_button

weapon_id

This enum represents the unique identifier for various weapons in the game.

none

Represents no weapon.


deagle

Represents a Desert Eagle.


elite

Represents the Dual Berettas.


fiveseven

Represents a Five-SeveN.


glock

Represents a Glock-18.


ak47

Represents an AK-47.


aug

Represents an AUG.


awp

Represents an AWP.


famas

Represents a FAMAS.


g3sg1

Represents a G3SG1.


galilar

Represents a Galil AR.


m249

Represents an M249.


m4a1

Represents an M4A4.


mac10

Represents a MAC-10.


p90

Represents a P90.


zone_repulsor

Represents a zone repulsor device.


mp5sd

Represents an MP5-SD.


ump45

Represents a UMP-45.


xm1014

Represents an XM1014.


bizon

Represents a PP-Bizon.


mag7

Represents a MAG-7.


negev

Represents a Negev.


sawedoff

Represents a Sawed-Off.


tec9

Represents a Tec-9.


taser

Represents a Zeus x27 taser.


hkp2000

Represents a P2000.


mp7

Represents an MP7.


mp9

Represents an MP9.


nova

Represents a Nova.


p250

Represents a P250.


shield

Represents a shield.


scar20

Represents a SCAR-20.


sg556

Represents an SG 553.


ssg08

Represents an SSG 08.


knifegg

Represents the Golden Knife.


knife

Represents the default knife.


flashbang

Represents a flashbang.


hegrenade

Represents an HE grenade.


smokegrenade

Represents a smoke grenade.


molotov

Represents a Molotov.


decoy

Represents a decoy grenade.


incgrenade

Represents an incendiary grenade.


c4

Represents a C4 explosive.


healthshot

Represents a health shot.


knife_t

Represents the Terrorist knife.


m4a1_silencer

Represents the M4A1-S.


usp_silencer

Represents the USP-S.


cz75a

Represents a CZ75-Auto.


revolver

Represents an R8 Revolver.


tagrenade

Represents a tactical awareness grenade.


fists

Represents fists.


breachcharge

Represents a breach charge.


tablet

Represents a tablet.


melee

Represents a generic melee weapon.


axe

Represents an axe.


hammer

Represents a hammer.


spanner

Represents a spanner (wrench).


knife_ghost

Represents a ghost knife.


firebomb

Represents a firebomb grenade.


diversion

Represents a diversion device.


fraggrenade

Represents a fragmentation grenade.


snowball

Represents a snowball.


bumpmine

Represents a bump mine.


knife_bayonet

Represents a Bayonet.


knife_css

Represents the Classic Knife.


knife_flip

Represents a Flip Knife.


knife_gut

Represents a Gut Knife.


knife_karambit

Represents a Karambit.


knife_m9bayonet

Represents an M9 Bayonet.


knife_tactical

Represents a Huntsman Knife.


knife_falchion

Represents a Falchion Knife.


knife_survival_bowie

Represents a Bowie Knife.


knife_butterfly

Represents a Butterfly Knife.


knife_push

Represents a Shadow Daggers.


knife_cord

Represents a Paracord Knife.


knife_canis

Represents a Survival Knife.


knife_ursus

Represents an Ursus Knife.


knife_gypsy_jackknife

Represents a Navaja Knife.


knife_outdoor

Represents a Nomad Knife.


knife_stiletto

Represents a Stiletto Knife.


knife_widowmaker

Represents a Talon Knife.


knife_skeleton

Represents a Skeleton Knife.


knife_kukri

Represents a Kukri Knife.

rect

__call

Constructor

Creates a new rectangle.

Arguments

1. Default rectangle (0, 0 position; 0, 0 size).

None.

2. Single value.

Name
Type
Description

value

float

Mins XY, maxs XY value.

3. Single vector.

Name
Type
Description

value

Mins vector, maxs vector.

4. Double value.

Name
Type
Description

x

float

Mins/maxs X coordinate.

y

float

Mins/maxs Y coordinate.

5. Double vector.

Name
Type
Description

mins

Mins vector.

maxs

Maxs vector.

6. Four values.

Name
Type
Description

x0

float

Mins X coordinate.

y0

float

Mins Y coordinate.

x1

float

Maxs X coordinate.

y1

float

Maxs Y coordinate.

Returns

Type
Description

rect

New rectangle.

Example

local my_rect = draw.rect(50, 50, 150, 150);

mins

Field

Type: vec2

Mins (top-left) vector.


maxs

Field

Type: vec2

Maxs (bottom-right) vector.


width

Method

Either returns rectangle's width, or sets a new width.

Arguments

1. Get width.

None.

2. Set width.

Name
Type
Description

value

float

New width.

Returns

1. Get width.

Type
Description

float

Width.

2. Set width.

Type
Description

rect

New rectangle with changed width.

Example

local half_width = rect:width(rect:width() * 0.5);

height

Method

Either returns rectangle's height, or sets a new height.

Arguments

1. Get height.

None.

2. Set height.

Name
Type
Description

value

float

New height.

Returns

1. Get height.

Type
Description

float

Height.

2. Set height.

Type
Description

rect

New rectangle with changed height.

Example

local half_height = rect:height(rect:height() * 0.5);

size

Method

Either returns rectangle's size, or sets a new size.

Arguments

1. Get size.

None.

2. Set size.

Name
Type
Description

value

New size.

Returns

1. Get size.

Type
Description

Size.

2. Set size.

Type
Description

rect

New rectangle with changed size.

Example

local half_size = rect:size(rect:size() * draw.vec2(0.5, 0.5));

explode

Method

Explodes the rectangle by given vector (increase size from center into all directions by coordinates in the vector).

Arguments

Name
Type
Description

value

Explode size.

Returns

Type
Description

rect

Exploded rectangle.

Example

local exp = rect:explode(draw.vec2(6, 6)); -- will subtract -3,-3 from mins and add 3,3 to maxs

half_width

Method

Returns a rectangle with half of the width of this rectangle.

Arguments

None.

Returns

Type
Description

rect

Rectangle with halved width.

Example

local half = rect:half_width();

translate

Method

Translates (moves) this rectangle by vector coordinates.

Arguments

Name
Type
Description

value

Translation amount.

Returns

Type
Description

rect

Translated rectangle.

Example

local rect = draw.rect(50, 50, 150, 150);
local translated = rect:translate(draw.vec2(5, 5)); -- mins/maxs will be 55,55 and 155,155

margin_left

Method

Move rectangle from the left by given amount.

Arguments

Name
Type
Description

value

float

Margin amount.

Returns

Type
Description

rect

Moved rectangle.

Example

local new = rect:margin_left(5); -- moves to the right by 5px

margin_right

Method

Move rectangle from the right by given amount.

Arguments

Name
Type
Description

value

float

Margin amount.

Returns

Type
Description

rect

Moved rectangle.

Example

local new = rect:margin_right(5); -- moves to the left by 5px

margin_top

Method

Move rectangle from the top by given amount.

Arguments

Name
Type
Description

value

float

Margin amount.

Returns

Type
Description

rect

Moved rectangle.

Example

local new = rect:margin_top(5); -- moves to the bottom by 5px

margin_bottom

Method

Move rectangle from the bottom by given amount.

Arguments

Name
Type
Description

value

float

Margin amount.

Returns

Type
Description

rect

Moved rectangle.

Example

local new = rect:margin_bottom(5); -- moves to the top by 5px

padding_left

Method

Adds the value to the left side of the rectangle.

Arguments

Name
Type
Description

value

float

Padding amount.

Returns

Type
Description

rect

Resized rectangle.

Example

local new = rect:padding_left(5); -- adds 5 to mins x

padding_right

Method

Adds the value to the right side of the rectangle.

Arguments

Name
Type
Description

value

float

Padding amount.

Returns

Type
Description

rect

Resized rectangle.

Example

local new = rect:padding_right(5); -- adds 5 to maxs x

padding_top

Method

Adds the value to the top side of the rectangle.

Arguments

Name
Type
Description

value

float

Padding amount.

Returns

Type
Description

rect

Resized rectangle.

Example

local new = rect:padding_top(5); -- adds 5 to mins y

padding_bottom

Method

Adds the value to the bottom side of the rectangle.

Arguments

Name
Type
Description

value

float

Padding amount.

Returns

Type
Description

rect

Resized rectangle.

Example

local new = rect:padding_bottom(5); -- adds 5 to maxs y

shrink

Method

Shrinks (implodes) the rectangle by given amount.

Arguments

Name
Type
Description

value

float

Shrink value.

Returns

Type
Description

rect

Resized rectangle.

Example

local shrinked = rect:shrink(5); -- adds 5,5 to mins and subtracts 5,5 from maxs

expand

Method

Expands (explodes) the rectangle by given amount.

Arguments

Name
Type
Description

value

float

Expand value.

Returns

Type
Description

rect

Resized rectangle.

Example

local expanded = rect:expand(5); -- subtracts 5,5 from mins and adds 5,5 to maxs

contains

Method

Returns true if this rectangle contains either vector or another rectangle.

Rectangle overload will return true ONLY of entire other rectangle is within the bounds of this one.

Arguments

1. Vector variant.

Name
Type
Description

other

Vector to check against.

2. Rectangle variant.

Name
Type
Description

other

rect

Rectangle to check against.

Returns

Type
Description

bool

true if other object is in bounds of this rectangle.

Example

if rect:contains(cursor_pos) then
    -- ...
end

overlaps

Method

Returns true if the other rectangle overlaps with this rectangle.

Arguments

Name
Type
Description

other

rect

Rectangle to check against.

Returns

Type
Description

bool

true if other rectangle overlaps with this rectangle.

Example

if rect:overlaps(another_rect) then
    -- ...
end

intersect

Method

Intersects this rectangle with another rectangle.

Arguments

Name
Type
Description

other

rect

Rectangle to intersect with.

Returns

Type
Description

rect

Intersected rectangle.

Example

local intersected = rect:intersect(another_rect);

tl

Method

Returns top-left vector.

Arguments

None.

Returns

Type
Description

Top-left vector.

Example

local tl = rect:tl();

tr

Method

Returns top-right vector.

Arguments

None.

Returns

Type
Description

Top-right vector.

Example

local tr = rect:tr();

br

Method

Returns bottom-right vector.

Arguments

None.

Returns

Type
Description

Bottom-right vector.

Example

local br = rect:br();

bl

Method

Returns bottom-left vector.

Arguments

None.

Returns

Type
Description

Bottom-left vector.

Example

local bl = rect:bl();

center

Method

Returns center point of this rectangle.

Arguments

None.

Returns

Type
Description

Center point.

Example

local center = rect:center();

circle

Method

Treats this rectangle as an ellipsis and returns point on it. Note, that this "ellipsis" will be perfect with no modified curvature (basically if this rectangle is a box - you will get a point on a perfect circle).

Arguments

Name
Type
Description

r

float

Radians value.

Returns

Type
Description

Point on the ellipsis.

Example

local point = rect:circle(rad(250)); -- returns point on the 250th degree

floor

Method

Returns floored rectangle.

Arguments

None.

Returns

Type
Description

rect

Floored rectangle.

Example

local floored = rect:floor();

ceil

Method

Returns ceiled rectangle.

Arguments

None.

Returns

Type
Description

rect

Ceiled rectangle.

Example

local ceiled = rect:ceil();

round

Method

Returns rounded rectangle.

Arguments

None.

Returns

Type
Description

rect

Rounded rectangle.

Example

local rounded = rect:round();

is_zero

Method

Returns true if both mins and maxs are equal to 0.

Arguments

None.

Returns

Type
Description

bool

true if this is a zero rectangle.

Example

if rect:is_zero() then
    -- ...
end

color

color

Last modified: 03 January 2025

This type is a color used within the rendering system.

Do not mistake this type with that is used in game! While these types are interchangeable internally, they are NOT in the API.

__call

Creates a new color instance.

Arguments

1. Default color (translucent black).

None.

2. Integer colors.

3. Hex string.

Returns

Example


white

Returns a white, opaque color.

Arguments

None.

Returns

Example


white_transparent

Returns a white, transparent color.

Arguments

None.

Returns

Example


black

Returns a black, opaque color.

Arguments

None.

Returns

Example


black_transparent

Returns a black, transparent color.

Arguments

None.

Returns

Example


percent

Returns a red-to-green color, depending on the provided percent.

Arguments

Returns

Example


gray

Returns a black-to-white color, depending on the provided percent.

Arguments

Returns

Example


interpolate

Interpolates two colors.

Arguments

Returns

Example


rgba

Returns integer representation of this color (RGBA format)

Arguments

None.

Returns

Example


argb

Returns integer representation of this color (ARGB format)

Arguments

None.

Returns

Example


bgra

Returns integer representation of this color (BGRA format)

Arguments

None.

Returns

Example


abgr

Returns integer representation of this color (ABGR format)

Arguments

None.

Returns

Example


darken

Returns darker variant of this color.

Arguments

Returns

Example


mod_a

Modulate opacity of the color. This will take existing opacity, and multiply it by whatever value you provide. It is useful if you want to modulate same color in steps, instead of setting the accurate opacity number.

Arguments

1. Float variant.

2. Integer variant.

Returns

Example


r

Override red and return new color.

Arguments

Returns

Example

g

Override green and return new color.

Arguments

Returns

Example

b

Override blue and return new color.

Arguments

Returns

Example

a

Override opacity and return new color.

Arguments

Returns

Example


get_r

Returns red color value.

Arguments

None.

Returns

Example


get_g

Returns green color value.

Arguments

None.

Returns

Example


get_b

Returns blue color value.

Arguments

None.

Returns

Example


get_a

Returns opacity color value.

Arguments

None.

Returns

Example


h

Return hue value of the color.

Arguments

None.

Returns

Example


s

Returns saturation value of the color.

Arguments

None.

Returns

Example


v

Returns brightness value of the color.

Arguments

None.

Returns

Example


hsv

Construct new color from provided HSB values.

Arguments

Returns

Example

vec2
vec2
vec2
vec2
vec2
vec2
vec2
vec2
vec2
vec2
vec2
vec2
vec2
vec2

Name

Type

Description

r

int

Red color (0 to 255).

g

int

Green color (0 to 255).

b

int

Blue color (0 to 255).

a

int

Opacity (0 to 255). Defaults to 255.

Name

Type

Description

hex

string

Hex string. Formats are: #rrggbbaa, #rrggbb, #rgba and #rgb.

Type

Description

color

Color object.

local white = draw.color(255, 255, 255);

Type

Description

color

Color object.

local white = draw.color.white();

Type

Description

color

Color object.

local white_t = draw.color.white_transparent();

Type

Description

color

Color object.

local black = draw.color.black();

Type

Description

color

Color object.

local black_t = draw.color.black_transparent();

Name

Type

Description

p

float

Percentile (0 to 1).

a

float

Opacity. Defaults to 1.

Type

Description

color

Color object.

local yellow = draw.color.percent(0.5);

Name

Type

Description

b

float

Percentile (0 to 1).

a

float

Opacity. Defaults to 1.

Type

Description

color

Color object.

local gray = draw.color.gray(0.5);

Name

Type

Description

a

color

Starting color.

b

color

Ending color.

t

float

Interpolation percentile.

Type

Description

color

Color object.

local a = draw.color.white();
local b = draw.color.black();
local i = draw.color.interpolate(a, b, 0.5); -- gray

Type

Description

int

RGBA color.

local num = col:rgba();

Type

Description

int

ARGB color.

local num = col:argb();

Type

Description

int

BGRA color.

local num = col:bgra();

Type

Description

int

ABGR color.

local num = col:abgr();

Name

Type

Description

value

float

Modulation amount (0 to 1).

Type

Description

color

Darker color.

local darker = col:darken(0.5);

Name

Type

Description

value

float

Opacity modulation (0 to 1).

Name

Type

Description

value

int

Opacity modulation (0 to 255).

Type

Description

color

Modulated color.

local half_opacity = col:mod_a(0.5);

Name

Type

Description

value

float

New value.

Type

Description

color

New color.

local full_red = col:r(1);

Name

Type

Description

value

float

New value.

Type

Description

color

New color.

local full_green = col:g(1);

Name

Type

Description

value

float

New value.

Type

Description

color

New color.

local full_blue = col:b(1);

Name

Type

Description

value

float

New value.

Type

Description

color

New color.

local full_opacity = col:a(1);

Type

Description

int

Color value.

local r = col:get_r();

Type

Description

int

Color value.

local g = col:get_g();

Type

Description

int

Color value.

local b = col:get_b();

Type

Description

int

Color value.

local a = col:get_a();

Type

Description

int

Hue (0 to 359).

local hue = col:h();

Type

Description

float

Saturation (0 to 1).

local saturation = col:s();

Type

Description

float

Brightness (0 to 1).

local brightness = col:v();

Name

Type

Description

hue

int

Hue (0 to 359).

saturation

float

Saturation (0 to 1).

brightness

float

Brightness (0 to 1).

alpha

float

Override opacity of the source color. Must be either left out, or provided 0 to 1 value.

Type

Description

color

New color.

local new_col = col:hsv(250, 0.5, 0.1);
color

Layer

A layer is a type that is used to store render commands, as well as vertex and index data. This is the only way to push shapes and control rendering state.

g

Type: command

The next render command to be pushed to the queue. This is the object you want to change to, for example, set a texture, or change rendering modes.


font

Type: font_base

Font to use with add_text. If nothing has been set, no text will get rendered.


tex_sz

Type: vec2?

Texture dimensions. This value is only required if you are trying to render rounded shapes with a texture, so the rendering system will correctly map your UV coordinates to whatever shape you are rendering.


skip_dpi

Type: bool

If set to true, will skip global DPI scale. Defaults to true.


add_triangle_filled

Adds a filled triangle with a single color.

Arguments

Name

Type

Description

a

A point.

b

B point.

c

C point.

col

Shape color.

Returns

Nothing.

Example

layer:add_triangle_filled(
    draw.vec2(50, 50), draw.vec2(25, 75),
    draw.vec2(75, 75), draw.color(255, 255, 255));

add_quad_filled

Adds a filled quad with a single color.

Arguments

Name

Type

Description

tl

Top left point.

tr

Top right point.

br

Bottom right point.

bl

Bottom left point.

col

Shape color.

Returns

Nothing.

Example

layer:add_quad_filled(
    draw.vec2(50, 50), draw.vec2(100, 60),
    draw.vec2(100, 100), draw.vec2(30, 70),
    draw.color(255, 255, 255));

add_rect_filled

Adds a filled rectangle with a single color.

Arguments

Name

Type

Description

r

Rectangle.

col

Shape color.

Returns

Nothing.

Example

layer:add_rect_filled(draw.rect(50, 50, 150, 150), draw.color(255, 255, 255));

add_circle_filled

Adds a filled circle with a single color.

Arguments

Name

Type

Description

center

Center point.

radius

float

Circle radius.

c

Shape color.

segments

int

Circle segments. If set to 0, will attempt automatic segment deduction. Defaults to 0.

fill

float

Fill amount (clockwise, 0 to 1). Defaults to 1.

Returns

Nothing.

Example

layer:add_circle_filled(draw.vec2(50, 50), 10, draw.color(255, 255, 255));

add_triangle_filled_multicolor

Adds a filled, multicolor triangle.

Arguments

Name

Type

Description

a

A point.

b

B point.

c

C point.

cols

table[color, color, color]

Colors for each point. Colors go in the very same order as the parameter list.

Returns

Nothing.

Example

layer:add_triangle_filled_multicolor(
     draw.vec2(50, 50), draw.vec2(25, 75),
     draw.vec2(75, 75), {
        draw.color(255, 0, 0),
        draw.color(0, 255, 0),
        draw.color(0, 0, 255)
     });

add_rect_filled_multicolor

Adds a filled, multicolor rectangle.

Arguments

Name

Type

Description

r

Rectangle.

cols

table[color, color, color, color]

Colors for each corner of the rectangle, in clockwise order starting from top-left.

Returns

Nothing.

Example

layer:add_rect_filled_multicolor(
    draw.rect(50, 50, 150, 150), {
        draw.color(255, 0, 0),
        draw.color(0, 255, 0),
        draw.color(0, 0, 255),
        draw.color(255, 255, 0)
    });

add_circle_filled_multicolor

Adds a filled, multicolor circle.

Arguments

Name

Type

Description

center

Center point.

radius

float

Circle radius.

cols

table[color, color]

Colors for the gradient, starting with the inner and ending with the outer color.

segments

int

The number of segments to approximate the circle. Defaults to 36.

fill

float

The portion of the circle to fill, where 1.0 is a full circle. Defaults to 1.0.

Returns

Nothing.

Example

layer:add_circle_filled_multicolor(
    draw.vec2(100, 100), 50, {
        draw.color(255, 0, 0),
        draw.color(0, 0, 255)
    }, 36, 1.0);

add_quad_filled_multicolor

Adds a filled, multicolor quad.

Arguments

Name

Type

Description

tl

Top left point.

tr

Top right point.

br

Bottom right point.

bl

Bottom left point.

cols

table[color, color]

Colors for the gradient, applied from bottom to top.

Returns

Nothing.

Example

layer:add_quad_filled_multicolor(
    draw.vec2(50, 50), draw.vec2(150, 50),
    draw.vec2(150, 150), draw.vec2(50, 150), {
        draw.color(255, 0, 0),
        draw.color(0, 0, 255)
    });

add_pill_multicolor

Adds a multicolor pill shape.

Arguments

Name

Type

Description

mins

Top left point of the pill.

maxs

Bottom right point of the pill.

radius_min

float

The minimum radius of the pill's rounded edges.

radius_max

float

The maximum radius of the pill's rounded edges.

cols

table[color, color]

Colors for the gradient, applied from bottom to top.

segments

int

The number of segments for approximating rounded edges. Defaults to 16.

Returns

Nothing.

Example

layer:add_pill_multicolor(
    draw.vec2(50, 50), draw.vec2(150, 100),
    10, 20, {
        draw.color(255, 0, 0),
        draw.color(0, 0, 255)
    }, 16);

add_shadow_line

Adds a shadow line.

Arguments

Name

Type

Description

r

Bounding box for the shadow line.

dir

Shadow direction.

a

float

Max opacity. Defaults to 0.25.

Returns

Nothing.

Example

layer:add_shadow_line(
    draw.rect(50, 50, 150, 150), draw.shadow_dir.down, 0.25);

add_shadow_rect

Adds a shadowed rectangle.

Arguments

Name

Type

Description

r

Rectangle.

radius

float

Shadow distance, in pixels, outwards.

bg

bool

Whether to draw a background for the rectangle. Defaults to true.

a

float

Max opacity of the shadow. Defaults to 0.25.

Returns

Nothing.

Example

layer:add_shadow_rect(
    draw.rect(50, 50, 150, 150), 15, true, 0.25);

add_glow

Adds a glow box.

Arguments

Name

Type

Description

r

Box rectangle.

radius

float

Glow distance, in pixels, outwards.

c

Glow color.

parts

Parts of the glow to enable. Defaults to all.

Returns

Nothing.

Example

layer:add_glow(draw.rect(50, 50, 150, 150), 15, draw.color(255, 0, 0));

add_rect_filled_rounded

Adds a filled, rounded rectangle.

Arguments

Name

Type

Description

r

Rectangle.

c

Fill color.

amount

float

Rounding amount.

rnd

Rounding mode. Defaults to all.

Returns

Nothing.

Example

layer:add_rect_filled_rounded(
    draw.rect(50, 50, 150, 150),
    draw.color(255, 0, 0),
    10,
    draw.rounding.all
);

add_rect_filled_rounded_multicolor

Adds a filled, multicolor rounded rectangle.

Arguments

Name

Type

Description

r

Rectangle.

c

table[color, color, color, color]

Fill colors. Used clockwise, starting from top left.

amount

float

Rounding amount.

rnd

Rounding mode. Defaults to all.

Returns

Nothing.

Example

layer:add_rect_filled_rounded_multicolor(
    draw.rect(50, 50, 150, 150), {
        draw.color(255, 0, 0),
        draw.color(0, 255, 0),
        draw.color(0, 0, 255),
        draw.color(255, 255, 0)
    },
    10,
    draw.rounding.all
);

add_triangle

Adds a stroked triangle.

Arguments

Name

Type

Description

a

Point A.

b

Point B.

c

Point C.

col

Line color.

thickness

float

Line thickness. Defaults to 1.0.

mode

Outline mode. Defaults to inset.

Returns

Nothing.

Example

layer:add_triangle(
    draw.vec2(50, 50),
    draw.vec2(25, 75),
    draw.vec2(75, 75),
    draw.color(255, 0, 0),
    1.0,
    draw.outline_mode.inset
);

add_quad

Adds a stroked quad.

Arguments

Name

Type

Description

tl

Top-left point.

tr

Top-right point.

br

Bottom-right point.

bl

Bottom-left point.

c

Line color.

thickness

float

Line thickness. Defaults to 1.0.

mode

Outline mode. Defaults to inset.

Returns

Nothing.

Example

layer:add_quad(
    draw.vec2(50, 50),
    draw.vec2(150, 50),
    draw.vec2(150, 150),
    draw.vec2(50, 150),
    draw.color(255, 0, 0),
    1.0,
    draw.outline_mode.inset
);

add_rect

Adds a stroked rectangle.

Arguments

Name

Type

Description

r

Rectangle.

c

Line color.

thickness

float

Line thickness. Defaults to 1.0.

mode

Outline mode. Defaults to inset.

Returns

Nothing.

Example

layer:add_rect(
    draw.rect(50, 50, 150, 150),
    draw.color(255, 0, 0),
    1.0,
    draw.outline_mode.inset
);

add_circle

Adds a stroked circle.

Arguments

Name

Type

Description

center

Center point.

radius

float

Circle radius.

c

Line color.

segments

int

Circle segments. Defaults to 36.

fill

float

Fill amount. Defaults to 1.0.

thickness

float

Line thickness. Defaults to 1.0.

mode

Outline mode. Defaults to inset.

Returns

Nothing.

Example

layer:add_circle(
    draw.vec2(100, 100),
    50,
    draw.color(255, 0, 0),
    36,
    1.0,
    1.0,
    draw.outline_mode.inset
);

add_line

Adds a line.

Arguments

Name

Type

Description

a

Start point.

b

End point.

c

Line color.

thickness

float

Line thickness. Defaults to 1.0

Returns

Nothing.

Example

layer:add_line(
    draw.vec2(50, 50),
    draw.vec2(150, 150),
    draw.color(255, 0, 0)
);

add_line_multicolor

Adds a multicolor line.

Arguments

Name

Type

Description

a

Start point.

b

End point.

c

Start color.

c2

End color.

thickness

float

Line thickness. Defaults to 1.0.

Returns

Nothing.

Example

layer:add_line_multicolor(
    draw.vec2(50, 50),
    draw.vec2(150, 150),
    draw.color(255, 0, 0),
    draw.color(0, 0, 255),
    2.0
);

add_rect_rounded

Adds a rounded, filled rectangle.

Arguments

Name

Type

Description

r

Rectangle.

c

Line color.

amount

float

Rounding amount.

rnd

Rounding mode. Defaults to all.

thickness

float

Line thickness. Defaults to 1.0.

mode

Outline mode. Defaults to inset.

Returns

Nothing.

Example

layer:add_rect_rounded(draw.rect(50, 50, 150, 150),
    draw.color(255, 255, 255), 14);

add_text

Adds text.

If font wasn't set, this function will do nothing.

You can control the color while rendering the text. To change the color, add \fRRGGBBAA to the string. To reset the color, add \b.

Arguments

Name

Type

Description

p

Text origin point.

text

string

Text.

c

Text color.

params

Text aligning parameters. Defaults to nil.

Returns

Nothing.

Example

layer:add_text(draw.vec2(50, 50), 'Hello world!', draw.color(255, 255, 255));

override_clip_rect

Overrides clip rectangle with support of intersection.

Arguments

Name

Type

Description

r

New clip rect.

intersect

bool

Whether this function should intersect previous rect with the new one. Defaults to true.

Returns

Nothing.

Example

layer:override_clip_rect(draw.rect(50, 50, 150, 150));
vec2
vec2
vec2
color
vec2
vec2
vec2
vec2
color
rect
color
vec2
color
vec2
vec2
vec2
rect
vec2
vec2
vec2
vec2
vec2
vec2
vec2
rect
shadow_dir
rect
rect
color
glow_parts
rect
color
rounding
rect
rounding
vec2
vec2
vec2
color
outline_mode
vec2
vec2
vec2
vec2
color
outline_mode
rect
color
outline_mode
vec2
color
outline_mode
vec2
vec2
color
vec2
vec2
color
color
rect
color
rounding
outline_mode
vec2
color
text_params?
rect?