In this section, you'll find Lua examples that you can use to learn about our API. Please note that these examples don't cover the entirety of the API itself, so you'll have to do some exploration by yourself!
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).
Managing Builds
Branches can hold any builds - both verified and unverified.
To assign a build to a branch:
Go to the Builds tab.
Find the build you want to assign.
Click Set branch.
Select the branch and submit.
This immediately makes that build available to anyone using the branch.
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.
Note: Adding users does not automatically enable the branch for them. It only gives them the option to join.
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. Make meaningful and unique items
Trivial one-line scripts, spam items, commonly made items that don't provide anything new or submissions with no truly meaningful functionality are not allowed. Workshop content should be fresh and interesting for the users, so all items must undergo a quality assurance to ensure they're not polluting 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.
ShadowDir
This enum is used to determine shadow direction for add_shadow_line method.
UP
Field
The darkest side of the shadow will be at the bottom.
DOWN
Field
The darkest side of the shadow will be at the top.
LEFT
Field
The darkest side of the shadow will be on the left side.
RIGHT
Field
The darkest side of the shadow will be on the right side.
RenderMode
This enum is used to toggle rendering modes.
NORMAL
Field
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
Field
Wireframe rendering. This means that the polygons will no longer be filled with color, nor texture sampling will ever work.
Instances
Let’s start by creating a simple 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.ControlID and pass the desired ID, or just pass a simple string instead.
Then, create the checkbox by calling gui.Checkbox and passing the ID you've chosen.
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.MakeControl.
You may also create both the control and the checkbox, or any other menu element, at the same time using gui.MakeControlEasy !
Adding the row to a group
With the control and row ready, let’s add them to a group.
In this example, we'll use the lua>elements a group. First, locate that group in the global context:
Then call its Add method to include your row:
That's it!
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:
and close it after.
The final script should look something like this:
And here's the result:
local cb = gui.Checkbox('my_checkbox');
local row = gui.MakeControl('My checkbox', cb);
local cb, row = gui.MakeControlEasy('my_checkbox', 'My checkbox', 'checkbox')
local group = gui.ctx:Find('lua>elements a');
group:Add(row);
if cb:GetValue():Get() then
local cb, row = gui.MakeControlEasy('my_checkbox', 'Checkbox', 'checkbox');
local group = gui.ctx:Find('lua>elements a');
group:Add(row);
local function onPresentQueue()
if cb:GetValue():Get() then
local d = draw.surface;
d.font = draw.fonts['gui_main'];
d:AddText(draw.Vec2(50, 50),
'Hello drawing! My first script speaking.',
draw.color.White()
);
end
end
events.presentQueue:Add(onPresentQueue);
To view group and control IDs, you can enable Debug mode in the SCRIPTS tab.
It is very important to call Reset() method if you add multiple controls, so the layout will stack everything correctly.
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)
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
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.
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.
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.
Creating Libraries
This resource only goes over the basics of library development. If you wish to learn more about libraries, please go .
Libraries allow users to write pre-written, reusable code that can be imported anywhere, at any time. This is useful if you often reuse portions of your code in multiple scripts, or if you wish to compartmentalize your scripts and have a cleaner code base.
In Fatality, libraries are divided into two categories: Local libraries and Cloud libraries. Local libraries are located in your fatality/scripts/lib folder and may only be used by other local scripts, meanwhile cloud libraries are similar to cloud scripts and can be shared and imported by any other cloud script through the workshop. Despite that difference, libraries follow the same code structure:
-- Usually, a 'module' table is created and all of your libraries contents go into it.
local M = {}
-- You can export functions.
function M.MyFunction()
print('Call from my library')
end
-- Or constants.
M.MyValue = 979
-- Or any other value.
M.MenuElement = gui.Checkbox('external_checkbox')
-- At the end of every library, make sure to return the contents you wanna export!
return M
You may then import said library from another file using either its file name or identifier.
-- In another file.
local my_library = require('library')
my_library.MyFunction() -- Prints 'Call from my library'
print(my_library.MyValue) -- Prints '979'
gui.ctx:Find('lua>elements a'):Add(my_library.MenuElement) -- Adds a new checkbox
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
Read the .
Complete a tutorial.
Updating Items
In order to update an item you need to follow these steps:
After these actions are complete, your new build will be available for users instantly.
Additionally, you may want to test upcoming builds before they hit the Live item. For that, we recommend looking into .
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 for usage details.
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.
Event_t
Event usertype. An instance of this type can be found in .
Add
Method
Adds a callback to the event.
Arguments
CCVar
Usage:
Usage: game.cvar:{method}
This type represents the game's cvar system.
Ray_t
Describes the ray type used by the tracing methods.
SetHull
Method
Changes the shape of the ray to a box/hull, using the specified mins and maxs.
Arguments
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
Counter control
In our Lua API, we give users the ability to make their own custom menu controls. Here's an example on how to make a simple counter:
With that, you'll have an extremely simple counter that you can click on to increment.
ConVar
Represents a convar used by the game.
name
FieldRead only
Type: string
CSWeaponMode
This enum represents the firing mode for a weapon.
PRIMARY_MODE
Field
Primary mode (usually left mouse button).
CPlane
Encapsulates the plane information in the trace object.
normal
FieldRead only
Type:
User_t
This type represents basic user information.
avatar
Field
Types
In this section, the most common renderer types are listed, that are not particularly bound to a specific part of the renderer.
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.
Note: You can upload a ZIP to bundle assets alongside the script. See Bundled Assets
Tip: Use a Beta branch to test new builds with a subset of users before moving them to Default. See Branches
Best practice: Request the minimum capabilities your script actually uses. Users will see and approve these.
CGlobalVarsBase
Usage:
game.globalVars.{field}
Usage: game.globalVars.{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.
m_flRealTime
Field
Type: float
Time passed since the game start, in seconds.
m_iFrameCount
Field
Type: int
Amount of frames rendered since the game start.
m_flAbsFrameTime
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.
m_iMaxClients
Field
Type: int
Maximum amount of clients on the current server.
m_iTicksThisFrame
Field
Type: int
Amount of ticks passed during the currently rendered frame. Any value above 1 might indicate a stall during rendering.
m_flRenderFrameTime
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.
m_flCurTime
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.
m_flTickFraction
Field
Type: float
Current tick's fractional value.
m_iTickCount
Field
Type: int
Ticks passed since the server's game start.
m_szMapPath
Field
Type: string
Relative path to current loaded map's file.
m_szMapName
Field
Type: string
Name of the currently loaded map.
Rounding
Rounding
Last modified: 03 January 2025
This enum is used to determine the rounding for rounded shapes.
TL
Field
Round top-left corner.
TR
Field
Round top-right corner.
BL
Field
Round bottom-left corner.
BR
Field
Round bottom-right corner.
T
Field
Round both of the top corners. This produces the same result as using bit.bor(draw.Rounding.TL, draw.Rounding.TR).
L
Field
Round both of the left corners. This produces the same result as using bit.bor(draw.Rounding.TL, draw.Rounding.BL).
R
Field
Round both of the right corners. This produces the same result as using bit.bor(draw.Rounding.TR, draw.Rounding.BR).
B
Field
Round both of the bottom corners. This produces the same result as using bit.bor(draw.Rounding.BL, draw.Rounding.BR).
ALL
Field
Round all corners. This produces the same result as using bit.bor(draw.Rounding.TL, draw.Rounding.TR, draw.Rounding.BL, draw.Rounding.BR).
TextAlignment
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
Field
Align left. It will mean that the text position's X coordinate is located at the left side of the text area.
CENTER
Field
Align center. It will mean that the text position's X (or Y) coordinate is located at the center of the text area.
RIGHT
Field
Align right. It will mean that the text position's X coordinate is located at the right side of the text area.
TOP
Field
Align top. It will mean that the text position's Y coordinate is located at the top side of the text area.
BOTTOM
Field
Align bottom. It will mean that the text position's Y coordinate is located at the bottom side of the text area.
FontFlags
This enum determines which flags a font object should possess. Setting those flags is only possible during type construction.
SHADOW
Field
Adds a 1px shadow to font glyphs.
OUTLINE
Field
Adds a 1px outline to font glyphs.
ANTI_ALIAS
Field
Enable antialiasing on font glyphs. This flag only works on GDI fonts.
NO_DPI
Field
Disable DPI scaling on this font. By default, font glyphs will be scaled in accordance to the global DPI scale.
NO_KERN
Field
Disable glyph kerning on this font.
MONO
Field
Enables a strong hinting algorithm for rasterization. Only works on FreeType fonts.
LIGHT
Field
Enables a light hinting algorithm for rasterization. Only works on FreeType fonts.
CSWeaponCategory
This enum represents the category classification for weapons in the game.
OTHER
Field
Represents weapons or items that don't fit into any specific category.
MELEE
Field
Represents melee weapons, such as knives or other close-combat tools.
SECONDARY
Field
Represents secondary weapons, such as pistols.
SMG
Field
Represents submachine guns (SMGs).
RIFLE
Field
Represents rifles, including assault rifles and sniper rifles.
HEAVY
Field
Represents heavy weapons, such as machine guns and shotguns.
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.
local Counter = {} do
-- Create the metatable for this control.
Counter.__index = gui.LuaControlProto()
-- Specify any initial data. This is propagated to any LuaControl initialized with this metatable.
Counter.__index.initialData = {
counter = 0
}
-- Override any methods you wish.
function Counter.__index:onRender(contents, scrollbar, mins, maxs)
contents:AddRectFilled(draw.Rect(mins, maxs), draw.color.White())
contents.font = draw.fonts['gui_bold']
contents:AddText(mins + draw.Vec2(5, 5), tostring(self.data.counter), draw.color.Black())
contents.font = nil
end
function Counter.__index:onMouseDown(key)
if key == gui.MouseButton.LEFT then
self.data.counter = self.data.counter + 1
self:LockInput() -- Makes sure you can't drag the menu while clicking.
end
end
function Counter.__index:onMouseUp(key)
if key == gui.MouseButton.LEFT then
self:UnlockInput() -- Makes sure you can drag menu again after clicking.
end
end
function Counter.create(id, initialValue)
local control = gui.LuaControl(id, Counter.__index, draw.Vec2(), draw.Vec2(0, 24)) do
control.sizeToParentW = true -- Resizes the control to the width of the container.
control.data.counter = initialValue or 0
control.margin = draw.Rect(3, 7, 3, 7) -- Default control margin
end
return control
end
end
gui.ctx:find('lua>elements a'):add(Counter.create('counter'))
Name
Type
Description
fn
function
Callback function. Arguments that are accepted by the function are dictated by the event instance.
Returns
Nothing.
Example
Remove
Method
Removes a callback from the event.
Arguments
Name
Type
Description
fn
function
Callback function, that was earlier passed to the add() function.
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 Command 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.
You should Create() an object only once. Invoking this method after the object was created will be meaningless.
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 **.
events.presentQueue:Add(function ()
-- will be called every time game queues a frame for rendering
end);
local function on_present()
if some_condition then
events.presentQueue:Remove(on_present)
end
end
events.presentQueue:Add(on_present)
tex:Create();
font:Destroy();
Find
Method
Get the game's cvar under this name.
Arguments
Name
Type
Description
name
string
Var name.
Returns
Type
Description
Convar object.
Example
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
Name
Type
Description
mins
The minimum bounding of the box
maxs
The maximum bounding of the box
Returns
Nothing.
Example
SetSphere
Method
Changes the shape of the ray to a sphere, using the specified center position and radius.
Arguments
Name
Type
Description
center
The center of the sphere
radius
number
The radius of the sphere
Returns
Nothing.
Example
local ray = Ray_t()
ray:SetHull(Vector(-4, -4, -4), Vector(4, 4, 4)) -- Traces a cube (8x8x8).
local ray = Ray_t()
ray:SetSphere(Vector(0, 0, 0), 10) -- Traces a sphere.
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.
globalVars
Field
Type: CGlobalVarsBase
This service exposes global variables used by the game, such as frame time or current server time.
engine
Field
Type: CEngineClient
This service exposes the engine client, which includes commonly used engine-related functions.
input
Field
Type: CCSGOInput
This service exposes the command input system.
inputSystem
Field
Type: CInputSystem
This service exposes the control input system.
gameUIFuncs
Field
Type: CGameUIFuncs
This service exposes the game's UI functions.
physicsQueryInterface
Field
Type: CPhysicsQueryInterface
This service exposes the game's tracing functions.
gameEntitySystem
Field
Type: CGameEntitySystem
This service exposes some of the game's entity list functions.
PlaySound
Method
Plays a game sound.
Arguments
Name
Type
Description
Returns
Nothing.
Example
FontGDI
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
Constructor
Constructs a font object.
Arguments
Returns
Example
CInputSystem
Usage: game.input_system:{method}
This type represents the game's control input system.
VKToButtonCode
Method
Converts a virtual key to button code.
Arguments
Name
Type
Description
Returns
Type
Description
Example
EntityList_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.
ForEach
Method
Loops the entities.
Arguments
Returns
Nothing.
Example
ForEachZ
Method
Loops the entities in the reverse order.
Arguments
Returns
Nothing.
Example
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 (seeStep By Step Guide).
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:
Go to the Dependencies tab.
Click Add dependency.
Find the library you want to reference and click Add.
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.
CGameUIFuncs
Usage: game.gameUIFuncs:{method}
This type represents the game's UI functions.
GetBindingForButtonCode
Method
Returns the binding name for a button code.
Arguments
Name
Type
Description
Returns
Type
Description
Example
CCSGOInput
Usage: game.input.{field_or_method}
This type represents the game's command input system.
m_bInThirdPerson
FieldRead only
Type: bool
true if currently in the third person.
GetViewAngles
Method
Returns current camera view angles.
Arguments
None.
Returns
Type
Description
Example
SetViewAngles
Method
Sets new camera view angles.
Arguments
Name
Type
Description
Returns
Nothing.
Example
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.
AddListener
Method
Adds a game event to the listener.
Arguments
Name
Type
Description
Returns
Nothing.
Example
Context
This type represents the GUI context.
Find
Method
Finds a control by ID.
Arguments
Returns
Example
user
Field
Type:
User's basic information.
Glyph_t
This type represents a glyph object.
codepoint
FieldRead only
Type: int
Character codepoint.
size
FieldRead only
Type:
Glyph dimensions.
offset
FieldRead only
Type:
Glyph offset.
uv
FieldRead only
Type:
UV rect on the texture atlas.
CCSWeaponBaseVData
This type represents a weapon's static data.
__index
Function
Attemps to search for a field in this class.
Arguments
Returns
Example
C_BaseCSGrenadeProjectile
This type represents a grenade projectile.
This type inherits type. All of its base methods and fields are also available in this type.
GetAbsOrigin
Method
Returns the absolute origin (the one that is used for rendering).
Arguments
None.
Returns
Example
GetGrenadeType
Method
Returns the grenade type.
Arguments
None.
Returns
Example
NotificationSystem
This type represents a notification system.
Add
Method
Adds a notification to the list.
Arguments
Returns
Nothing.
Example
ControlID
This type represents a control ID.
This type is mostly deprecated and can be replaced by strings on all control constructors.
__call
Constructor
Constructs the ID structure.
Arguments
Returns
Example
id
FieldRead only
Type: int
Hashed representation of the ID.
idString
FieldRead only
Type: string
Normal representation of the ID.
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.
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. Automatically inserts a space between parameters.
CGameTrace
Encapsulates all tracing information returned by the tracing methods.
m_pEnt
FieldRead only
Type:
CGameEntitySystem
Usage:
Usage: game.gameEntitySystem:{method}
This type encapsulates some entity querying functionalities. If you wish to loop for players, controllers, dropped items or projectiles, go .
Accessor
accessor
Last modified: 03 January 2025
This type represents a safe way to access maps.
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.
SvgTexture
This type represents an SVG texture object.
__call
Constructor
Constructs an SVG texture.
HitGroup_t
This enum represents the unique identifier for all player hitgroups. Not to be confused with EHitBox.
HEAD
Field
Adapter
This type represents a rendering adapter used within the rendering system.
GetBackBuffer
Method
Returns a back buffer texture. May return a blank or outdated texture, if the back buffer texture was not updated.
EntityEntry_t
Represents an entity entry.
entity
Field
Type: <type>
MouseButton
This enum represents mouse buttons.
LEFT
Field
Left mouse button.
OutlineMode
This enum is used to determine the outline mode for outlined shapes.
INSET
Field
Inset outlining. This means that the outline will be inside the shape (+1px from top-left, -1px from bottom-right).
Notification
This type represents a notification item.
__call
Constructor
Constructs the notification.
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.
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.
Overridable: this label indicates that the method, can be overridden by the developer and its parent type will inherit any functionalities.
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.
NECK
Field
STOMACH
Field
RIGHTARM
Field
LEFTARM
Field
RIGHTLEG
Field
LEFTLEG
Field
GENERIC
Field
UNUSED
Field
INVALID
Field
GEAR
Field
SPECIAL
Field
RIGHT
Field
Right mouse button.
MIDDLE
Field
Middle (scroll wheel) mouse button
BACK
Field
"Back" mouse button (side button 1).
FORWARD
Field
"Forward" mouse button (side button 2).
OUTSET
Field
Outset outlining. This means that the outline will be outside of the shape (-1px from top-left, +1px from bottom-right).
CENTER
Field
Center outlining. This means that the outline will match the shape size.
Player's profile picture. Will be nil if was yet to be initialized.
visuals
Field
Type: PlayerEntryVisualData
Player's ESP information.
This field is only available on entries that use C_CSPlayerController type.
This field is only available on entries that use C_CSPlayerPawn type. Use only inside the playerInfoPre and playerInfoPost callbacks, otherwise you may access outdated or invalid data.
sound
string
Path to the sound, e.g. sounds/ui/weapon_cant_buy
volume
number
Volume from 0 to 1, if passed -1 it uses the game's volume.
It also accepts sounds in your csgo/sounds directory. Only vsnd_c files are supported.
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.
Arguments
Name
Type
Description
sv
string
SVG text.
h
float
Target height. Defaults to 0, and 0 means that there will be no automatic downscale.
Returns
Type
Description
SvgTexture
SVG texture object.
Example
This type inherits Texturetype. 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.
game.PlaySound('sounds/ui/weapon_cant_buy', 0.1)
local button = game.input_system:VKToButtonCode(0x41); -- 'A'
Create a new file ending with .lua, and begin your work on the script.
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 several callbacks we provide. Each event has its own signature, so pay attention to the parameters your callback function should accept. presentQueue doesn’t provide any parameters, so our function doesn’t need any either.
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 drawing layer. 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:
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 draw.fonts. 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 AddText method on the layer. Notice that it’s called using the colon syntax: obj:fn(), because it’s a method.
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 Add method on events.presentQueue.
Result
That's it! If you've done everything correctly, you should see something like this:
local function onPresentQueue()
local d = draw.surface;
d.font = draw.fonts['gui_main'];
d:AddText(draw.Vec2(50, 50),
'Hello drawing! My first script speaking.',
draw.Color.White()
);
end
events.presentQueue:Add(onPresentQueue);
local function onPresentQueue()
end
local d = draw.surface;
d.font = draw.fonts['gui_main'];
d:AddText(draw.Vec2(50, 50),
'Hello drawing! My first script speaking brev.',
draw.Color.White()
);
events.presentQueue:add(onPresentQueue);
.ljbc format cannot be loaded from local sources.
Defining something local is optional, although recommended for clearer scope management.
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?
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.
Arguments
Name
Type
Description
...
...
Values to print in the console.
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
text
string
Read for documentation.
Example
unpack
Function
Unpacks a table of elements.
Arguments
Name
Type
Description
tbl
table
Any table
Example
Delay
Function
Delays a callback by a certain amount of time, in seconds.
Arguments
Name
Type
Description
delay
number
Delay, in seconds
callback
function
Callback
Example
__shutdown
Function
Special function, it's called whenever the script unloads. Isn't called in case of errors.
Arguments
None.
Example
print('Hello world!', 123); -- prints out "Hello world! 123" to the console
error('Can't recover from this one! Error: ' .. tostring(123));
game.gameEntitySystem:ForEachByClass('C_C4', function(entity)
if entity.m_bStartedArming:Get() then
print('Someone is planting!')
end
end)
local proxy = game.gameEntitySystem:GetFirstByClass('C_CSGameRulesProxy')
local game_rules = proxy.m_pGameRules:GetAs('client.dll', 'C_CSGameRules')
if not game_rules then
error('Not found')
end
print(game_rules.m_bWarmupPeriod:Get())
Arguments
None.
Returns
Type
Description
Back buffer texture pointer.
Example
GetBackBufferDownsampled
Method
Returns a 4x down sampled version of the back buffer texture.
Arguments
None.
Returns
Type
Description
Downsampled back buffer texture pointer.
Example
GetSharedTexture
Method
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
Type
Description
Shared texture pointer.
Example
local bb = adapter:GetBackBuffer();
local ds = adapter:GetBackBufferDownsampled();
local shared = adapter:GetSharedTexture();
Arguments
Name
Type
Description
hdr
string
Header (title).
txt
string
Text (body).
Returns
Type
Description
Notification
Notification object.
Example
local notif = gui.Notification('Hello', 'Lua works!');
CEngineClient
Usage: game.engine:{method}
An instance of this type provides a way to interface with Source 2's Engine-to-Client service.
GetLastTimestamp
Method
Returns last timestamp, in seconds.
Arguments
None.
Returns
Type
Description
Example
GetLastServerTick
Method
Returns last server tick number.
Arguments
None.
Returns
Type
Description
Example
InGame
Method
Returns whether the client is currently in game.
Arguments
None.
Returns
Type
Description
Example
IsConnected
Method
Returns whether the client is currently connected to a game server.
Arguments
None.
Returns
Type
Description
Example
GetNetChan
Method
Returns the Network Channel used for network communication.
Arguments
None.
Returns
Type
Description
Example
ClientCmd
Method
Executes a client-sided console command.
Arguments
Name
Type
Description
Returns
Nothing.
Example
GetScreenSize
Method
Returns client window screen size.
Arguments
None.
Returns
Type
Description
Example
SchemaAccessor_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.
offset
Field
Type: number
Get
Method
Returns the value.
Arguments
None.
Returns
Example
GetAs
Method
Returns the value casted as another game class. Automatically dereferences pointers.
Arguments
Returns
Example
Set
Method
Sets the value.
Arguments
Returns
Nothing.
Example
CNetChan
Provides a way to interface with a Network Channel's class.
GetAddress
Method
If the current channel is null, this function will return nil instead.
Returns address string of the remote machine.
Arguments
None.
Returns
Example
IsLoopback
Method
Returns whether the current channel is connected to the local machine (loopback address).
Arguments
None.
Returns
Example
IsNull
Method
Returns whether the channel is stubbed.
Arguments
None.
Returns
Example
GetLatency
Method
Returns current latency to the remote server (in seconds).
Arguments
None.
Returns
Example
C_CSWeaponBase
This type represents a CCSWeaponBase entity.
This type inherits type. All of its base methods and fields are also available in this type.
GetAbsOrigin
Method
Returns the absolute origin (the one that is used for rendering).
Arguments
None.
Returns
Example
GetDefIndex
Method
Returns the weapon definition index.
Arguments
None.
Returns
Example
GetType
Method
Returns the weapon type.
Arguments
None.
Returns
Example
GetData
Method
Returns the weapon static data.
Arguments
None.
Returns
Example
PenResult_t
This type encapsulates all penetration data returned from FireBullet.
damage
Field
The damage done by the weapon.
hitgroup
Field
The hitgroup that was hit. May be invalid.
GetHitPos
Method
Returns one of the bullet impacts.
Arguments
Name
Type
Description
Returns
Type
Description
Example
GetHitPosCount
Method
Returns how many bullet impacts there is.
Arguments
None.
Returns
Type
Description
Example
entities
This table represents an internal entity list.
players
Field
Type: <
penetration
Usage: mods.penetration.{method}
FireBullet
CHandle
This type represents an entity handle.
index
Field
Type: number
EHitBox
This enum represents the unique identifier for all player hitboxes.
The bullet impact, nil if index >= GetHitPosCount() .
number
The bullet impact count
Get
Method
Returns the entity, or nil if nothing found.
Arguments
None.
Returns
Type
Description
<type>
Entity instance.
Example
Valid
Method
Returns true if the handle is valid.
Arguments
None.
Returns
Type
Description
bool
true if valid.
Example
IsClientSide
Method
Returns true if the handle links to a client-side entity.
Arguments
None.
Returns
Type
Description
bool
true if client-sided.
Example
You can also compare this type using a == operator.
local last_time = game.engine:GetLastTimestamp();
local server_tick = game.engine:GetLastServerTick();
if game.engine:InGame() then
print("I'm in game!");
end
if game.engine:IsConnected() then
print("I'm connected!");
end
local chan = game.engine:GetNetChan();
game.engine:ClientCmd('say Hello!');
local w, h = game.engine:GetScreenSize();
local health = player.m_iHealth:Get();
local collision = player.m_pCollision:GetAs('client.dll', 'CCollisionProperty');
local mins = collision.m_vecMins:Get()
local maxs = collision.m_vecMaxs:Get()
player.m_iHealth:Set(50); -- won't really do anything with the health
local chan = game.engine:GetNetChan();
if chan and not chan:IsNull() then
print(chan:GetAddress());
end
local chan = game.engine:GetNetChan();
if chan and not chan:IsNull() and chan:IsLoopback() then
print('Connected to localhost!');
end
local chan = game.engine:GetNetChan();
if not chan or chan:IsNull() then
print('Not connected!');
end
local chan = game.engine:GetNetChan();
if chan and not chan:IsNull() then
print('Current latency: ' .. tostring(math.round(chan:GetLatency() * 1000.0)) .. 'ms');
end
local org = wep:GetAbsOrigin();
local wep_id = wep:GetDefIndex();
local type = wep:GetType();
local data = wep:GetData();
local positions = {}
for i = 1, pen_result:GetHitPosCount() do
positions[i] = pen_result:GetHitPos(i - 1)
end
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.
The direction the bullet is going, computed as end_point - origin_point
Returns
Type
Description
boolean
If there was an error during simulation.
The penetration data
Example
ScaleDamage
Function
Scales up the damage from a weapon given a hitgroup and, optionally, a player.
Arguments
Name
Type
Description
damage
number
The damage to be scaled
weapon
The gun the bullet is being fired from
Returns
Type
Description
number
The scaled damage
Example
Methods in this namespace are accessed with the . operator, not the usual : operator.
Only call these inside the createMove callback!
local eye_position = local_player:GetEyePos()
local weapon = local_player:GetActiveWeapon()
local enemy_position = enemy:GetHitboxCenter(EHitBox.HEAD)
local _, pen = mods.penetration.FireBullet(eye_position, enemy_position - eye_position,
weapon, enemy)
print(pen.damage, pen.hitgroup)
local weapon = local_player:GetActiveWeapon()
local dmg = mods.penetration.ScaleDamage(45, weapon, HitGroup_t.HEAD, enemy)
This function can be expensive, use it moderately.
Texture
This type represents a texture object.
This type inherits 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)
__call
Constructor
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.
2. From memory.
3. From RGBA data.
Returns
Example
isAnimated
FieldRead only
Type: bool
Set to true if this is an instance of .
GetSize
Method
Returns size of this texture.
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
Constructor
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
AnimatedTexture
This type is an animated texture. This texture type only supports animated GIF types, and does not support APNG.
This type inherits 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 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 type, and use texture mapping.
__call
Constructor
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.
2. From memory.
Returns
Example
shouldLoop
Field
Type: bool
If set to false, will not loop the animation automatically. Defaults to true.
ResetLoop
Method
Reset loop to run from the first frame.
Arguments
None.
Returns
Nothing.
Example
SetFrame
Method
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.
Arguments
Returns
Nothing.
Example
GetFrameCount
Method
Returns amount of frames in the animation.
Arguments
None.
Returns
Example
CPhysicsQueryInterface
Usage:
Usage: game.physicsQueryInterface:{method}
This type encapsulates all tracing functionalities.
Performs a regular trace ray call. Skips local player.
Arguments
Name
Type
Description
ray
The ray/shape
from
The starting position
Returns
Type
Description
The resulting trace object
Example
TraceMovement
Function
Performs a trace ray call using the player movement mask. Skips local player.
Arguments
Name
Type
Description
ray
The ray/shape
from
The starting position
Returns
Type
Description
The resulting trace object
Example
TraceGrenade
Function
Performs a trace call using the grenade mask, as a line. Doesn't use a custom ray.
Arguments
Name
Type
Description
from
The starting position
to
The ending position
Returns
Type
Description
The resulting trace object
TraceGrenadeHull
Function
Performs a trace call using the grenade mask, as a hull. Doesn't use a custom ray.
Arguments
Name
Type
Description
from
The starting position
to
The ending position
Returns
Type
Description
The resulting trace object
local ray = Ray_t()
local from = Vector(0, 0, 0)
local to = Vector(100, 100, 100)
local trace = game.physicsQueryInterface:TraceRay(ray, from, to)
local player = entities.GetLocalPawn()
local ray = Ray_t() do
local collision = player.m_pCollision:GetAs('client.dll', 'CCollisionProperty')
ray:set_hull(collision.m_vecMins:Get(), collision.m_vecMaxs:Get())
end
local from = player:GetAbsOrigin()
local to = player:GetAbsOrigin() + player:GetAbsVelocity()
local trace = game.physicsQueryInterface:TraceMovement(ray, from, to)
Name
Type
Description
name
string
Field name.
Returns
Type
Description
Accessor instance or pointer accessor instance
Example
GetClassName
Function
Returns schema class name.
Returns
Type
Description
string
Name. Returns nil when failed.
Example
GetHandle
Function
Returns handle for this entity.
Returns
Type
Description
Entity handle
Example
GetPointer
Function
Returns a memory address for this entity, useful with FFI.
This type inherits 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
The input fields are the following:
The bound objects are the following:
Template:
__call
Constructor
Constructs a shader.
Arguments
Returns
Example
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 Event_t. 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.
There is an equivalent to an unload or shutdown callback, check it out .
presentQueue
Field
Invoked each time the game queues a frame for rendering. This is the only permitted location for drawing on screen.
Arguments
None.
frameStageNotify
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
renderStartPre
Field
Invoked every time game starts the scene rendering process. This event is called before the game's function runs.
Arguments
None.
renderStartPost
Field
Invoked every time game starts scene rendering process. This event is called after the game's function runs.
Arguments
Name
Type
Description
setupViewPre
Field
Invoked every time the game sets up the view information. This event is called after the game's function runs.
Arguments
None.
overrideView
Field
Invoked every time the game internally overrides view information. You are free to change whatever you like in the provided view setup.
Arguments
createMove
Field
Invoked every time the game processes a game tick.
Arguments
event
Field
Invoked every time a game event fires.
Arguments
Name
Type
Description
input
Field
Invoked every time the GUI processes input.
Arguments
Name
Type
Description
menuToggled
Field
Invoked every time the GUI window is opened or closed.
Arguments
Name
Type
Description
playerInfoPre
Field
Invoked every time before the player ESP is rendered. Useful for accessing the rendering layer for visuals or adding new elements to ESP.
Arguments
Name
Type
Description
playerInfoPost
Field
Invoked every time after the player ESP is rendered.
Arguments
Name
Type
Description
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 pointer. You can get one from an instance of type by accessing obj field. Passing invalid data to this field WILL result in a crash. For a safer way, please use .
fragShader
Field
Type:
Fragment shader (aka Pixel Shader in DirectX terms) pointer. You can get one from an instance of type by accessing obj field. Passing invalid data to this field WILL result in a crash. For a safer way, please use .
clipRect
Field
Type: ?
Clip rectangle used for scissor testing. If this is set to nil, will not clip anything.
uvRect
Field
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
Field
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
Field
Type: float
Shape rotation. Not all shapes support this field. The value is set in degrees, not radians.
antiAlias
Field
Type: bool
If set to true, will apply tesselation to shapes.
ignoreScaling
Field
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.
chainedCall
Field
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.
onlyDownsampled
Field
Type: bool
If set to true, will capture back buffer (as long as chainedCall 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.
captureBackBuffer
Field
Type: bool
An alias to onlyDownsampled.
isTile
Field
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
Field
Type:
Rendering mode. You can read more about it in the type's documentation.
SetTexture
Method
Sets a texture in a safe manner.
Arguments
Returns
Nothing.
Example
SetShader
Method
Sets a fragment shader in a safe manner.
Arguments
Returns
Nothing.
Example
C_CSPlayerController
This type represents a CCSPlayerController class.
This type inherits type. All of its base methods and fields are also available in this type.
IsEnemy
Method
Returns true if this player is an enemy to the local player.
Arguments
None.
Returns
Example
GetName
Method
Returns the sanitized player name.
Arguments
None.
Returns
Example
GetPawn
Method
Returns the pawn attached to this controller.
Arguments
None.
Returns
Example
GetActiveWeapon
Method
Returns the active weapon.
Arguments
None.
Returns
Example
GetObserverPawn
Method
Returns the observer pawn used for this controller.
Arguments
None.
Returns
Example
GetObserverTarget
Method
Returns the pawn this controller is currently observing.
Arguments
None.
Returns
Example
GetObserverMode
Method
Returns the current observer mode.
Arguments
None.
Returns
Example
GetSteamID
Method
Returns this player's Steam ID64.
Arguments
None.
Returns
Example
GetStringSteamID
Method
Returns this player's Steam ID64, as a string.
Arguments
None.
Returns
Example
CHitboxInfo
This type encapsulates all of the hitbox information that can be retrieved.
You can retrieve the view information from game.viewRender service.
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 mods.events
This doesn't override the software's configuration, meaning that if you have ESP disabled for either enemies or teammates, the callback will not be called for those players.
This doesn't override the software's configuration, meaning that if you have ESP disabled for either enemies or teammates, the callback will not be called for those players.
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.
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.
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.
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;
}
]]);
cmd:SetTexture(my_tex);
cmd:SetShader(my_shader);
if player:IsEnemy() then
-- ...
end
local name = player:GetName();
local pawn = ctrl:GetPawn();
local wep = player:GetActiveWeapon();
local obs_pawn = ctrl:GetObserverPawn();
local obs = ctrl:GetObserverTarget();
local mode = ctrl:GetObserverMode();
local id = ctrl:GetSteamID();
print(id.low, id.high);
local id = ctrl:GetStringSteamID();
print(id);
bits:Reset();
local raw = bits:GetRaw();
bits:SetRaw(long_long_value);
if bits:None() then
-- ...
end
bits:Set(5); -- set bit #5 (same as bit.bor(val, bit.lshift(1, 5)))
bits:Unset(5);
if bits:Get(5) then
-- ...
end
bits:Toggle(5);
Arguments
None.
Returns
Type
Description
string
The name
Example
GetSurfaceProperty
Method
Returns the hitbox's surface property.
Arguments
None.
Returns
Type
Description
string
The hitbox property
Example
GetBoneName
Method
Returns the hitbox's bone name.
Arguments
None.
Returns
Type
Description
string
The hitbox bone
Example
GetMinBounds
Method
Returns the hitbox's minimum bounds.
Arguments
None.
Returns
Type
Description
The mins
Example
GetMaxBounds
Method
Returns the hitbox's maximum bounds.
Arguments
None.
Returns
Type
Description
The maxs
Example
GetShapeRadius
Method
Returns the hitbox's radius.
Arguments
None.
Returns
Type
Description
number
The radius
Example
GetBoneNameHash
Method
Returns the hitbox's name hash.
Arguments
None.
Returns
Type
Description
number
The hash
Example
GetGroupID
Method
Returns the hitbox's group ID.
Arguments
None.
Returns
Type
Description
number
The ID
Example
IsTranslationOny
Method
Returns whether the hitbox only translates or not.
Arguments
None.
Returns
Type
Description
boolean
The ID
Example
GetCRC
Method
Returns the hitbox's CRC value.
Arguments
None.
Returns
Type
Description
number
The CRC
Example
GetRenderColor
Method
Returns the hitbox's rendering color. Not really useful.
Arguments
None.
Returns
Type
Description
userdata
The color
Example
GetHitboxIndex
Method
Returns the hitbox's unique index.
Arguments
None.
Returns
Type
Description
number
The index
Example
local hbox_name = hitbox:GetName();
local prop = hitbox:GetSurfaceProperty();
local bone_name = hitbox:GetBoneName();
local mins = hitbox:GetMinBounds();
local maxs = hitbox:GetMaxBounds();
local radius = hitbox:GetShapeRadius();
local hash = hitbox:GetBoneNameHash();
local id = hitbox:GetGroupID();
local translate = hitbox:IsTranslationOny();
local crc = hitbox:GetCRC();
local crc = hitbox:GetRenderColor();
local hbox_index = hitbox:GetHitboxIndex();
Vec2
__call
Constructor
Creates a new 2D vector instance.
Arguments
1. Default vector (0, 0).
None.
2. Single value.
3. XY values.
Returns
Example
x
Field
Type: float
X coordinate.
y
Field
Type: float
Y coordinate.
Clone
Method
Returns a copy of this vector instance.
Arguments
None.
Returns
Example
Floor
Method
Returns floored variant of this vector.
Arguments
None.
Returns
Example
Ceil
Method
Returns ceiled variant of this vector.
Arguments
None.
Returns
Example
Round
Method
Returns rounded variant of this vector.
Arguments
None.
Returns
Example
Len
Method
Returns length of this vector.
Arguments
None.
Returns
Example
LenSqr
Method
Returns squared length of this vector.
Arguments
None.
Returns
Example
Dist
Method
Returns distance to another vector.
Arguments
Returns
Example
DistSqr
Method
Returns squared distance to another vector.
Arguments
Returns
Example
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.
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).
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).
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).
surface
FieldRead only
Type:
The layer you can render on.
GetTime
Method
Returns current render time, alias to .
Arguments
None.
Returns
Example
GetFrameTime
Method
Returns current frame time, alias to .
Arguments
None.
Returns
Example
GetScale
Method
Returns current render DPI scaling multiplier.
Arguments
None.
Returns
Example
GetDisplay
Method
Returns current render screen size, similar to .
Arguments
None.
Returns
Example
CreatePanoramaSvgTexture
Method
Finds and retrieves SVG data from Panorama and creates a new texture. Useful for retrieving icons (e.g. weapons and utilities) from the game.
local tex = draw.CreatePanoramaSvgTexture('icons/equipment/inferno', 26)
instance with vertical alignment.
Arguments
Name
Type
Description
v
Vertical alignment.
Returns
Type
Description
TextParams
Created text params.
Example
WithH
Function
Creates TextParams instance with horizontal alignment.
Arguments
Name
Type
Description
h
Horizontal alignment.
Returns
Type
Description
TextParams
Created text params.
Example
WithLine
Function
Creates TextParams instance with line alignment.
Arguments
Name
Type
Description
line
Line alignment.
Returns
Type
Description
TextParams
Created text params.
Example
WithVH
Function
Creates TextParams instance with vertical and horizontal alignments.
Arguments
Name
Type
Description
v
Vertical alignment.
h
Horizontal alignment.
Returns
Type
Description
TextParams
Created text params.
Example
WithVLine
Function
Creates TextParams instance with vertical alignment and line alignment.
Arguments
Name
Type
Description
v
Vertical alignment.
line
Line alignment.
Returns
Type
Description
TextParams
Created text params.
Example
WithHLine
Function
Creates TextParams instance with horizontal alignment and line alignment.
Arguments
Name
Type
Description
h
Horizontal alignment.
line
Line alignment.
Returns
Type
Description
TextParams
Created text params.
Example
WithVHLine
Function
Creates TextParams instance with vertical, horizontal and line alignments.
Arguments
Name
Type
Description
v
Vertical alignment.
h
Horizontal alignment.
Returns
Type
Description
TextParams
Created text params.
Example
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.
local align_top = draw.TextParams.WithV(draw.TextAlignment.TOP);
local align_right = draw.TextParams.WithH(draw.TextAlignment.RIGHT);
local lines_center = draw.TextParams.WithLine(draw.TextAlignment.CENTER);
local align_bottom_right = draw.TextParams.WithVH(draw.TextAlignment.BOTTOM, draw.TextAlignment.RIGHT);
local align = draw.TextParams.WithVLine(draw.TextAlignment.BOTTOM, draw.TextAlignment.CENTER);
local align = draw.TextParams.WithHLine(draw.TextAlignment.CENTER, draw.TextAlignment.CENTER);
local align = draw.TextParams.WithVHLine(draw.TextAlignment.CENTER, draw.TextAlignment.CENTER, draw.TextAlignment.CENTER);
C_CSWeaponBaseGun
This type represents a CCSWeaponBaseGun class.
This type inherits type. All of its base methods and fields are also available in this type.
GetAbsOrigin
Method
Returns the absolute origin (the one that is used for rendering).
Arguments
None.
Returns
Example
GetMaxSpeed
Method
Returns the maximal player speed when holding this weapon.
Arguments
None.
Returns
Example
GetInaccuracy
Method
Returns the current inaccuracy value.
Arguments
Returns
Example
GetSpread
Method
Returns the current spread value.
Arguments
Returns
Example
GetDefIndex
Method
Returns the weapon definition index.
Arguments
None.
Returns
Example
GetType
Method
Returns the weapon type.
Arguments
None.
Returns
Example
GetData
Method
Returns the weapon static data.
Arguments
None.
Returns
Example
IsGun
Method
Returns true if this weapon is a firearm.
Arguments
None.
Returns
Example
IsAttackable
Method
Returns true if you can attack with this weapon.
Arguments
None.
Returns
Example
HasSecondaryAttack
Method
Returns true if this weapon has a secondary attack mode.
Arguments
None.
Returns
Example
HasSpread
Method
Returns true if this weapon has spread (e.g. knives do not have any spread).
Arguments
None.
Returns
Example
math
Usage: math.{func}
This table extends the existing math table that is a part of Lua.
gui
Usage:
gui.{func_or_field}
Usage: gui.{func_or_field}
This table exposes the GUI system of the software.
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
MakeControlEasy
Function
A quick wrapper for MakeControl , returns both the menu element and control.
Arguments
Name
Type
Description
id
string
ID.
label
string
Label value.
Returns
Type
Description
any
Menu element (checkbox, slider etc.)
Control
Example
MakeStackedGroups
Function
Creates a vertical stack with two or more group boxes.
Arguments
Name
Type
Description
id
|string
ID
size
Size
Returns
Type
Description
Group stack object.
Example
IsVisible
Function
Returns whether or not the menu is currently open.
Returns
Type
Description
boolean
If menu is visible or not
Example
GetActiveOverridePath
Function
Returns the current ragebot/legitbot weapon or category path.
Arguments
None.
Returns
Type
Description
string
The path currently being used by the ragebot or legitbot
Example
GetMainWindow
Function
Returns the menu's main window.
Arguments
None.
Returns
Type
Description
The window object.
Example
GetHotkeyList
Function
Returns list of all controls with hotkeys currently added.
Arguments
None.
Returns
Type
Description
table<>
All controls currently with keybinds set
Example
GetThemeColors
Function
Returns list of all colors being used the GUI theme.
Arguments
None.
Returns
Type
Description
table<>
All menu colors
Example
All types and enums described in the child sections must be prefixed with gui..
local row = gui.MakeControl('Hello checkbox!', my_cb);
local slider, slider_ctrl = gui.MakeControlEasy('my_slider', 'Slider', 'slider', 0, 100);
local grp1 = gui.Group('grp1', 'My group 1', 150, gui.GroupWidthMode.DEFAULT);
local grp2 = gui.Group('grp2', 'My group 2', 150, gui.GroupWidthMode.DEFAULT);
local stack = gui.MakeStackedGroups("grp12", draw.vec2(234, 400), {
grp1, grp2
});
if gui.IsVisible() then
print('Menu is open!')
end
local override_path = gui.GetActiveOverridePath()
local hitchance = gui.ctx:Find(override_path .. '>weapon>hitchance')
local wnd = gui.GetMainWindow()
local pos = wnd:GetPosAbs()
local controls = gui.GetHotkeyList()
for i, control in ipairs(controls) do
local element = control:Cast() -- Convert to its parent type
if element:GetHotkeyState() then
print('overriding ' .. element:GetLabel().text,
'value ' .. tostring(element:GetValue():Get()))
end
end
local colors = gui.GetThemeColors()
draw.surface:AddRect(draw.Rect(0, 0, 100, 100), colors.accent)
Available types are:
Should only be called when you're alive, causes undefined behavior otherwise.
Available keys are
FontBase
This type represents the base class for font types. You cannot create an instance of this type. Instead, use the children types.
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.
xOffset
Field
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.
fallbackFont
Field
Type: FontBase
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.
Returns kerning value for a single character. If kerning is disabled, will instead return kerning gap.
Arguments
Name
Type
Description
cp
int
Codepoint.
Returns
Type
Description
float
Kerning value, in pixels.
Example
GetTextSize
Method
Returns text area size.
Arguments
Name
Type
Description
text
string
Text.
skip_scaling
bool
If set to true, will skip global DPI scaling. Defaults to false.
Returns
Type
Description
Text area size.
Example
WrapText
Method
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
Name
Type
Description
text
string
Text to wrap.
width
float
Target width.
Returns
Type
Description
string
Wrapped text.
Example
GetGlyph
Method
Returns glyph information for a character.
Arguments
Name
Type
Description
codepoint
int
Codepoint.
Returns
Type
Description
Glyph information.
Example
GetTexture
Method
Returns a texture atlas that contains the provided glyph.
Arguments
Name
Type
Description
gl
Character glyph.
Returns
Type
Description
int
Texture pointer, or nil if not found.
Example
This type inherits Managed 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.
local w = font:GetKernedCharWidth(prev_cp, cp);
local k = font:GetKerning(cp);
local sz = font:GetTextSize('Hello!');
local shorter = font:WrapText('This is some very long text!', 50);
local glyph = font:GetGlyph(cp);
local atlas = font:GetTexture(glyph);
Control
This type represents an abstract GUI control.
id
Field
til_newline
bool
Calculate size only until a line break is met. Defaults to false.
Whether or not the width of this control is locked to it's parent container
sizeToParentH
Field
Type: boolean
Whether or not the height of this control is locked to it's parent container
isTakingInput
Field
Type: boolean
Whether or not this control handles input in any way.
isTakingKeys
Field
Type: boolean
Whether or not this control is listening to generic key presses.
isTakingText
Field
Type: boolean
Whether or not this control is listening and handling text input.
margin
Field
Type: rect
The margin/offset to the parent container. Left, top, right and bottom, respectively.
isMouseOnMe
Field
Type: boolean
Whether or not the user is hovering this control.
aliases
Field
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).
GetPosAbs
Method
Returns this control's position relative to the screen origin (0, 0).
Arguments
None.
Returns
Type
Description
Absolute position of this control.
Example
GetArea
Method
Returns a rectangle containing the area of this control relative to the current container.
Arguments
Name
Type
Description
includeMargin
boolean
Whether or not to include the margin in the area.
Returns
Type
Description
Area of this control in container space.
Example
GetAreaAbs
Method
Returns a rectangle containing the area of this control relative to the screen origin (0, 0).
Arguments
Name
Type
Description
includeMargin
boolean
Whether or not to include the margin in the area.
Returns
Type
Description
Area of this control in screen space.
Example
GetLabel
Method
Returns the label of this control in the menu.
Arguments
None.
Returns
Type
Description
Control label, if any.
Example
GetHotkeyState
Method
Returns true if any of the control's hotkeys are active.
Arguments
None.
Returns
Type
Description
bool
true if any hotkey is active.
Example
HasHotkeys
Method
Returns true if this control has any hotkeys.
Arguments
None.
Returns
Type
Description
bool
true if control has hotkeys.
Example
SetDimensions
Method
Overrides the offset and size for this control.
Arguments
Name
Type
Description
position
Offset
size
Size
Returns
Nothing.
Example
SetVisible
Method
Changes visibility state for this control.
Arguments
Name
Type
Description
val
bool
Visibility state.
Returns
Nothing.
Example
AddCallback
Method
Adds a callback to this control.
Arguments
Name
Type
Description
cbk
function
Callback.
Returns
Nothing.
Example
Cast
Method
Attempts to downcast the control to the correct type.
Arguments
None.
Returns
Type
Description
<control>
New type, if any.
Example
Reset
Method
Resets control's state. This action is usually required if you change control's value directly by interacting with ValueParam.
You also should call this method on layouts if you add multiple controls into them.
This does not work for types. Use the text field instead.
This method does not override sizeToParentW and sizeToParentH.
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.
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.
C_CSPlayerPawn
This type represents a C_CSPlayerPawn class.
This type inherits type. All of its base methods and fields are also available in this type.
ShouldDraw
Method
Returns true if the game will draw this player on screen.
Arguments
None.
Returns
Example
IsLeftHanded
Method
Returns true if left-hand mode is enabled.
Arguments
None.
Returns
Example
GetAbsOrigin
Method
Returns the absolute origin (the one that is used for rendering).
Arguments
None.
Returns
Example
GetAbsAngles
Method
Returns the absolute angles (the one that is used for rendering).
Arguments
None.
Returns
Example
GetAbsVelocity
Method
Returns the absolute velocity.
Arguments
None.
Returns
Example
SetAbsOrigin
Method
Sets the new absolute origin.
Arguments
Returns
Nothing.
Example
SetAbsAngles
Method
Sets new absolute angles.
Arguments
Returns
Nothing.
Example
SetAbsVelocity
Method
Sets new absolute velocity.
Arguments
Returns
Nothing.
Example
IsAlive
Method
Returns true if the player is alive.
Arguments
None.
Returns
Example
IsEnemy
Method
Returns true if this player is an enemy to the local player.
Arguments
None.
Returns
Example
IsEnemyTo
Method
Returns whether this player is an enemy to another entity.
Arguments
Returns
Example
GetActiveWeapon
Method
Returns the active weapon.
Arguments
None.
Returns
Example
GetWeapons
Method
Returns all weapons in this player's inventory.
Arguments
None.
Returns
Example
GetName
Method
Returns the sanitized player name.
Arguments
None.
Returns
Example
GetViewOffset
Method
Returns the player's view offset (eye location relative to the player's origin).
Arguments
None.
Returns
Example
GetEyePos
Method
Returns the player's eye position.
Arguments
None.
Returns
Example
GetHitbox
Method
Returns hitbox information for a specific hitbox. Not to be confused with GetHitboxCenter.
Arguments
Returns
Example
GetHitboxCenter
Method
Returns hitbox position for a specific hitbox.
Arguments
Returns
Example
GetBoundingBox
Method
Returns the bounding box rectangle for this player. Returns nil if the player is not on screen.
local weapons = player:GetWeapons();
for i, v in ipairs(weapons) do
print(v:get_id())
end
local name = player:GetName();
local vo = player:GetViewOffset();
local eyes = player:GetEyePos();
local hbox_info = player:GetHitbox(EHitBox.HEAD);
local pelvis = player:GetHitboxCenter(EHitBox.PELVIS);
local bbox = player:GetBoundingBox();
ContextInput
This type represents the GUI input context.
You can use Cursor, IsMouseUp, IsMouseDown, IsKeyUp and IsKeyDown methods outside context. Using other methods will not make any sense, as the information will be outdated.
Cursor
Method
Returns current cursor position.
Arguments
None.
Returns
Example
CursorPrev
Method
Returns previous cursor position.
Arguments
None.
Returns
Example
CursorDelta
Method
Delta value between previous and current cursor positions.
Arguments
None.
Returns
Example
DidCursorMove
Method
Returns true if the cursor did move since the last input.
Arguments
None.
Returns
Example
DidWheelMove
Method
Returns true if mouse scroll wheel did move since the last input.
Arguments
None.
Returns
Example
DidProcessMouse
Method
Returns true if any mouse key's state had changed.
Arguments
None.
Returns
Example
ButtonReleased
Method
Returns true if any key was released since the last input.
Arguments
None.
Returns
Example
WheelDelta
Method
Returns the amount of rows scrolled this input.
Arguments
None.
Returns
Example
IsMouseUp
Method
Returns true if the mouse key is up (depressed).
Arguments
Returns
Example
IsMouseDown
Method
Returns true if the mouse key is down (pressed).
Arguments
Returns
Example
IsMouseClicked
Method
Returns true if the mouse key is clicked (switched from depressed to pressed state).
Arguments
Returns
Example
IsMouseReleased
Method
Returns true if the mouse key is released (switched from pressed to depressed state).
Arguments
Returns
Example
DidProcessKey
Method
Returns true if any key's state had changed.
Arguments
None.
Returns
Example
IsKeyUp
Method
Returns true if a key is up (depressed).
Arguments
Returns
Example
IsKeyDown
Method
Returns true if a key is down (pressed).
Arguments
Returns
Example
IsKeyClicked
Method
Returns true if a key is clicked (switched from depressed to pressed state).
Arguments
Returns
Example
IsKeyReleased
Method
Returns true if a key is released (switched from pressed to depressed state).
Arguments
Returns
Example
EItemDefinitionIndex
This enum represents the unique identifier for various weapons in the game.
NONE
Field
Represents no weapon.
DEAGLE
Field
Represents a Desert Eagle.
ELITE
Field
Represents the Dual Berettas.
FIVESEVEN
Field
Represents a Five-SeveN.
GLOCK
Field
Represents a Glock-18.
AK47
Field
Represents an AK-47.
AUG
Field
Represents an AUG.
AWP
Field
Represents an AWP.
FAMAS
Field
Represents a FAMAS.
G3SG1
Field
Represents a G3SG1.
GALILAR
Field
Represents a Galil AR.
M249
Field
Represents an M249.
M4A1
Field
Represents an M4A4.
MAC10
Field
Represents a MAC-10.
P90
Field
Represents a P90.
ZONE_REPULSOR
Field
Represents a zone repulsor device.
MP5SD
Field
Represents an MP5-SD.
UMP45
Field
Represents a UMP-45.
XM1014
Field
Represents an XM1014.
BIZON
Field
Represents a PP-Bizon.
MAG7
Field
Represents a MAG-7.
NEGEV
Field
Represents a Negev.
SAWEDOFF
Field
Represents a Sawed-Off.
TEC9
Field
Represents a Tec-9.
TASER
Field
Represents a Zeus x27 taser.
HKP2000
Field
Represents a P2000.
MP7
Field
Represents an MP7.
MP9
Field
Represents an MP9.
NOVA
Field
Represents a Nova.
P250
Field
Represents a P250.
SHIELD
Field
Represents a shield.
SCAR20
Field
Represents a SCAR-20.
SG556
Field
Represents an SG 553.
SSG08
Field
Represents an SSG 08.
KNIFEGG
Field
Represents the Golden Knife.
KNIFE
Field
Represents the default knife.
FLASHBANG
Field
Represents a flashbang.
HEGRENADE
Field
Represents an HE grenade.
SMOKEGRENADE
Field
Represents a smoke grenade.
MOLOTOV
Field
Represents a Molotov.
DECOY
Field
Represents a decoy grenade.
INCGRENADE
Field
Represents an incendiary grenade.
C4
Field
Represents a C4 explosive.
HEALTHSHOT
Field
Represents a health shot.
KNIFE_T
Field
Represents the Terrorist knife.
M4A1_SILENCER
Field
Represents the M4A1-S.
USP_SILENCER
Field
Represents the USP-S.
CZ75A
Field
Represents a CZ75-Auto.
REVOLVER
Field
Represents an R8 Revolver.
TAGRENADE
Field
Represents a tactical awareness grenade.
FISTS
Field
Represents fists.
BREACHCHARGE
Field
Represents a breach charge.
TABLET
Field
Represents a tablet.
MELEE
Field
Represents a generic melee weapon.
AXE
Field
Represents an axe.
HAMMER
Field
Represents a hammer.
SPANNER
Field
Represents a spanner (wrench).
KNIFE_GHOST
Field
Represents a ghost knife.
FIREBOMB
Field
Represents a firebomb grenade.
DIVERSION
Field
Represents a diversion device.
FRAGGRENADE
Field
Represents a fragmentation grenade.
SNOWBALL
Field
Represents a snowball.
BUMPMINE
Field
Represents a bump mine.
KNIFE_BAYONET
Field
Represents a Bayonet.
KNIFE_CSS
Field
Represents the Classic Knife.
KNIFE_FLIP
Field
Represents a Flip Knife.
KNIFE_GUT
Field
Represents a Gut Knife.
KNIFE_KARAMBIT
Field
Represents a Karambit.
KNIFE_M9BAYONET
Field
Represents an M9 Bayonet.
KNIFE_TACTICAL
Field
Represents a Huntsman Knife.
KNIFE_FALCHION
Field
Represents a Falchion Knife.
KNIFE_SURVIVAL_BOWIE
Field
Represents a Bowie Knife.
KNIFE_BUTTERFLY
Field
Represents a Butterfly Knife.
KNIFE_PUSH
Field
Represents a Shadow Daggers.
KNIFE_CORD
Field
Represents a Paracord Knife.
KNIFE_CANIS
Field
Represents a Survival Knife.
KNIFE_URSUS
Field
Represents an Ursus Knife.
KNIFE_GYPSY_JACKKNIFE
Field
Represents a Navaja Knife.
KNIFE_OUTDOOR
Field
Represents a Nomad Knife.
KNIFE_STILETTO
Field
Represents a Stiletto Knife.
KNIFE_WIDOWMAKER
Field
Represents a Talon Knife.
KNIFE_SKELETON
Field
Represents a Skeleton Knife.
KNIFE_KUKRI
Field
Represents a Kukri Knife.
Type
Description
Cursor position.
local cur = gui.input:Cursor();
Type
Description
Previous cursor position.
local prev = gui.input:CursorPrev();
Type
Description
Cursor delta.
local delta = gui.input:CursorDelta();
Type
Description
bool
true if moved.
if gui.input:DidCursorMove() then
-- ...
end
Type
Description
bool
true if moved.
if gui.input:DidWheelMove() then
-- ...
end
Type
Description
bool
true if processed.
if gui.input:DidProcessMouse() then
-- ...
end
Type
Description
bool
true if released.
if gui.input:button_released() then
-- ...
end
Type
Description
float
Rows scrolled.
local scroll = gui.input:WheelDelta();
Name
Type
Description
mb
Mouse button.
Type
Description
bool
true if depressed.
if gui.input:IsMouseUp(gui.MouseButton.LEFT) then
-- ...
end
Name
Type
Description
mb
Mouse button.
Type
Description
bool
true if pressed.
if gui.input:IsMouseDown(gui.MouseButton.LEFT) then
-- ...
end
Name
Type
Description
mb
Mouse button.
Type
Description
bool
true if clicked.
if gui.input:IsMouseClicked(gui.MouseButton.LEFT) then
-- ...
end
Name
Type
Description
mb
Mouse button.
Type
Description
bool
true if released.
if gui.input:IsMouseReleased(gui.MouseButton.LEFT) then
-- ...
end
Type
Description
bool
true if state changed.
if gui.input:DidProcessKey() then
-- ...
end
Name
Type
Description
k
int
Virtual key.
Type
Description
bool
true if depressed.
if gui.input:IsKeyUp(0x41) then -- 0x41 = "A"
-- ...
end
Name
Type
Description
k
int
Virtual key.
Type
Description
bool
true if pressed.
if gui.input:IsKeyDown(0x41) then -- 0x41 = "A"
-- ...
end
Name
Type
Description
k
int
Virtual key.
Type
Description
bool
true if clicked.
if gui.input:IsKeyClicked(0x41) then -- 0x41 = "A"
-- ...
end
Name
Type
Description
k
int
Virtual key.
Type
Description
bool
true if released.
if gui.input:IsKeyReleased(0x41) then -- 0x41 = "A"
-- ...
end
Either returns rectangle's width, or sets a new width.
Arguments
1. Get width.
None.
2. Set width.
Name
Type
Description
Returns
1. Get width.
Type
Description
2. Set width.
Type
Description
Example
Height
Method
Either returns rectangle's height, or sets a new height.
Arguments
1. Get height.
None.
2. Set height.
Name
Type
Description
Returns
1. Get height.
Type
Description
2. Set height.
Type
Description
Example
Size
Method
Either returns rectangle's size, or sets a new size.
Arguments
1. Get size.
None.
2. Set size.
Name
Type
Description
Returns
1. Get size.
Type
Description
2. Set size.
Type
Description
Example
Explode
Method
Explodes the rectangle by given vector (increase size from center into all directions by coordinates in the vector).
Arguments
Name
Type
Description
Returns
Type
Description
Example
HalfWidth
Method
Returns a rectangle with half of the width of this rectangle.
Arguments
None.
Returns
Type
Description
Example
Translate
Method
Translates (moves) this rectangle by vector coordinates.
Arguments
Name
Type
Description
Returns
Type
Description
Example
MarginLeft
Method
Move rectangle from the left by given amount.
Arguments
Name
Type
Description
Returns
Type
Description
Example
MarginRight
Method
Move rectangle from the right by given amount.
Arguments
Name
Type
Description
Returns
Type
Description
Example
MarginTop
Method
Move rectangle from the top by given amount.
Arguments
Name
Type
Description
Returns
Type
Description
Example
MarginBottom
Method
Move rectangle from the bottom by given amount.
Arguments
Name
Type
Description
Returns
Type
Description
Example
PaddingLeft
Method
Adds the value to the left side of the rectangle.
Arguments
Name
Type
Description
Returns
Type
Description
Example
PaddingRight
Method
Adds the value to the right side of the rectangle.
Arguments
Name
Type
Description
Returns
Type
Description
Example
PaddingTop
Method
Adds the value to the top side of the rectangle.
Arguments
Name
Type
Description
Returns
Type
Description
Example
PaddingBottom
Method
Adds the value to the bottom side of the rectangle.
Arguments
Name
Type
Description
Returns
Type
Description
Example
Shrink
Method
Shrinks (implodes) the rectangle by given amount.
Arguments
Name
Type
Description
Returns
Type
Description
Example
Expand
Method
Expands (explodes) the rectangle by given amount.
Arguments
Name
Type
Description
Returns
Type
Description
Example
Contains
Method
Returns true if this rectangle contains either vector or another rectangle.
Arguments
1. Vector variant.
Name
Type
Description
2. Rectangle variant.
Name
Type
Description
Returns
Type
Description
Example
Overlaps
Method
Returns true if the other rectangle overlaps with this rectangle.
Arguments
Name
Type
Description
Returns
Type
Description
Example
Intersect
Method
Intersects this rectangle with another rectangle.
Arguments
Name
Type
Description
Returns
Type
Description
Example
TL
Method
Returns top-left vector.
Arguments
None.
Returns
Type
Description
Example
TR
Method
Returns top-right vector.
Arguments
None.
Returns
Type
Description
Example
BR
Method
Returns bottom-right vector.
Arguments
None.
Returns
Type
Description
Example
BL
Method
Returns bottom-left vector.
Arguments
None.
Returns
Type
Description
Example
Center
Method
Returns center point of this rectangle.
Arguments
None.
Returns
Type
Description
Example
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
Returns
Type
Description
Example
Floor
Method
Returns floored rectangle.
Arguments
None.
Returns
Type
Description
Example
Ceil
Method
Returns ceiled rectangle.
Arguments
None.
Returns
Type
Description
Example
Round
Method
Returns rounded rectangle.
Arguments
None.
Returns
Type
Description
Example
IsZero
Method
Returns true if both mins and maxs are equal to 0.
local half_width = rect:Width(rect:Width() * 0.5);
local half_height = rect:Height(rect:Height() * 0.5);
local half_size = rect:Size(rect:Size() * draw.Vec2(0.5, 0.5));
local exp = rect:Explode(draw.Vec2(6, 6)); -- will subtract -3,-3 from mins and add 3,3 to maxs
local half = rect:HalfWidth();
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
local new = rect:MarginLeft(5); -- moves to the right by 5px
local new = rect:MarginRight(5); -- moves to the left by 5px
local new = rect:MarginTop(5); -- moves to the bottom by 5px
local new = rect:MarginBottom(5); -- moves to the top by 5px
local new = rect:PaddingLeft(5); -- adds 5 to mins x
local new = rect:PaddingRight(5); -- adds 5 to maxs x
local new = rect:PaddingTop(5); -- adds 5 to mins y
local new = rect:PaddingBottom(5); -- adds 5 to maxs y
local shrinked = rect:Shrink(5); -- adds 5,5 to mins and subtracts 5,5 from maxs
local expanded = rect:Expand(5); -- subtracts 5,5 from mins and adds 5,5 to maxs
if rect:Contains(cursor_pos) then
-- ...
end
if rect:Overlaps(another_rect) then
-- ...
end
local intersected = rect:Intersect(another_rect);
local tl = rect:TL();
local tr = rect:TR();
local br = rect:BR();
local bl = rect:BL();
local center = rect:Center();
local point = rect:Circle(rad(250)); -- returns point on the 250th degree
local floored = rect:Floor();
local ceiled = rect:Ceil();
local rounded = rect:Round();
if rect:IsZero() then
-- ...
end
Color
color
Last modified: 03 January 2025
This type is a color used within the rendering system.
__call
Constructor
Creates a new color instance.
Arguments
1. Default color (translucent black).
None.
2. Integer colors.
Name
Type
Description
r
int
Red color (0 to 255).
g
int
Green color (0 to 255).
3. Hex string.
Name
Type
Description
hex
string
Hex string. Formats are: #rrggbbaa, #rrggbb, #rgba and #rgb.
Returns
Type
Description
Color
Color object.
Example
White
Function
Returns a white, opaque color.
Arguments
None.
Returns
Type
Description
Color
Color object.
Example
WhiteTransparent
Function
Returns a white, transparent color.
Arguments
None.
Returns
Type
Description
Color
Color object.
Example
Black
Function
Returns a black, opaque color.
Arguments
None.
Returns
Type
Description
Color
Color object.
Example
BlackTransparent
Function
Returns a black, transparent color.
Arguments
None.
Returns
Type
Description
Color
Color object.
Example
Percent
Function
Returns a red-to-green color, depending on the provided percent.
Arguments
Name
Type
Description
p
float
Percentile (0 to 1).
a
float
Opacity. Defaults to 1.
Returns
Type
Description
Color
Color object.
Example
Gray
Function
Returns a black-to-white color, depending on the provided percent.
Arguments
Name
Type
Description
b
float
Percentile (0 to 1).
a
float
Opacity. Defaults to 1.
Returns
Type
Description
Color
Color object.
Example
Interpolate
Function
Interpolates two colors.
Arguments
Name
Type
Description
a
Color
Starting color.
b
Color
Ending color.
Returns
Type
Description
Color
Color object.
Example
RGBA
Method
Returns integer representation of this color (RGBA format)
Arguments
None.
Returns
Type
Description
int
RGBA color.
Example
ARGB
Method
Returns integer representation of this color (ARGB format)
Arguments
None.
Returns
Type
Description
int
ARGB color.
Example
BGRA
Method
Returns integer representation of this color (BGRA format)
Arguments
None.
Returns
Type
Description
int
BGRA color.
Example
ABGR
Method
Returns integer representation of this color (ABGR format)
Arguments
None.
Returns
Type
Description
int
ABGR color.
Example
Darken
Method
Returns darker variant of this color.
Arguments
Name
Type
Description
value
float
Modulation amount (0 to 1).
Returns
Type
Description
Color
Darker color.
Example
Lighten
Method
Returns saturated version of this color. Opposite of darken.
Arguments
Name
Type
Description
value
float
Modulation amount (0 to 1).
Returns
Type
Description
Color
Saturated color.
Example
ModA
Method
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.
Name
Type
Description
value
float
Opacity modulation (0 to 1).
2. Integer variant.
Name
Type
Description
value
int
Opacity modulation (0 to 255).
Returns
Type
Description
Color
Modulated color.
Example
R
Method
Override red and return new color.
Arguments
Name
Type
Description
value
float
New value.
Returns
Type
Description
Color
New color.
Example
G
Method
Override green and return new color.
Arguments
Name
Type
Description
value
float
New value.
Returns
Type
Description
Color
New color.
Example
B
Method
Override blue and return new color.
Arguments
Name
Type
Description
value
float
New value.
Returns
Type
Description
Color
New color.
Example
A
Method
Override opacity and return new color.
Arguments
Name
Type
Description
value
float
New value.
Returns
Type
Description
Color
New color.
Example
GetR
Method
Returns red color value.
Arguments
None.
Returns
Type
Description
int
Color value.
Example
GetG
Method
Returns green color value.
Arguments
None.
Returns
Type
Description
int
Color value.
Example
GetB
Method
Returns blue color value.
Arguments
None.
Returns
Type
Description
int
Color value.
Example
GetA
Method
Returns opacity color value.
Arguments
None.
Returns
Type
Description
int
Color value.
Example
H
Method
Return hue value of the color.
Arguments
None.
Returns
Type
Description
int
Hue (0 to 359).
Example
S
Method
Returns saturation value of the color.
Arguments
None.
Returns
Type
Description
float
Saturation (0 to 1).
Example
V
Method
Returns brightness value of the color.
Arguments
None.
Returns
Type
Description
float
Brightness (0 to 1).
Example
HSV
Method
Construct new color from provided HSB values.
Arguments
Name
Type
Description
hue
int
Hue (0 to 359).
saturation
float
Saturation (0 to 1).
Returns
Type
Description
Color
New color.
Example
Do not mistake this type with color that is used in game! While these types are interchangeable internally, they are NOT in the API.
local white = draw.Color(255, 255, 255);
local white = draw.color.White();
local white_t = draw.color.WhiteTransparent();
local black = draw.color.Black();
local black_t = draw.color.BlackTransparent();
local yellow = draw.color.Percent(0.5);
local gray = draw.color.Gray(0.5);
local a = draw.color.White();
local b = draw.color.Black();
local i = draw.color.Interpolate(a, b, 0.5); -- gray
local num = col:RGBA();
local num = col:argb();
local num = col:BGRA();
local num = col:ABGR();
local darker = col:Darken(0.5);
local saturated = col:Lighten(0.5);
local half_opacity = col:ModA(0.5);
local full_red = col:R(1);
local full_green = col:G(1);
local full_blue = col:B(1);
local full_opacity = col:A(1);
local r = col:GetR();
local g = col:GetG();
local b = col:GetB();
local a = col:GetA();
local hue = col:H();
local saturation = col:S();
local brightness = col:V();
local new_col = col:HSV(250, 0.5, 0.1);
b
int
Blue color (0 to 255).
a
int
Opacity (0 to 255). Defaults to 255.
t
float
Interpolation percentile.
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.
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
FieldRead only
Type:
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
Field
Type:
Font to use with add_text. If nothing has been set, no text will get rendered.
texSz
Field
Type:
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.
skipDpi
Field
Type: bool
If set to true, will skip global DPI scale. Defaults to true.
AddTriangleFilled
Method
Adds a filled triangle with a single color.
Arguments
Returns
Nothing.
Example
AddQuadFilled
Method
Adds a filled quad with a single color.
Arguments
Returns
Nothing.
Example
AddRectFilled
Method
Adds a filled rectangle with a single color.
Arguments
Returns
Nothing.
Example
AddCircleFilled
Method
Adds a filled circle with a single color.
Arguments
Returns
Nothing.
Example
AddTriangleFilledMulticolor
Method
Adds a filled, multicolor triangle.
Arguments
Returns
Nothing.
Example
AddRectFilledMulticolor
Method
Adds a filled, multicolor rectangle.
Arguments
Returns
Nothing.
Example
AddCircleFilledMulticolor
Method
Adds a filled, multicolor circle.
Arguments
Returns
Nothing.
Example
AddQuadFilledMulticolor
Method
Adds a filled, multicolor quad.
Arguments
Returns
Nothing.
Example
AddPillMulticolor
Method
Adds a multicolor pill shape.
Arguments
Returns
Nothing.
Example
AddShadowLine
Method
Adds a shadow line.
Arguments
Returns
Nothing.
Example
AddShadowRect
Method
Adds a shadowed rectangle.
Arguments
Returns
Nothing.
Example
AddGlow
Method
Adds a glow box.
Arguments
Returns
Nothing.
Example
AddRectFilledRounded
Method
Adds a filled, rounded rectangle.
Arguments
Returns
Nothing.
Example
AddRectFilledRoundedMulticolor
Method
Adds a filled, multicolor rounded rectangle.
Arguments
Returns
Nothing.
Example
AddTriangle
Method
Adds a stroked triangle.
Arguments
Returns
Nothing.
Example
AddQuad
Method
Adds a stroked quad.
Arguments
Returns
Nothing.
Example
AddRect
Method
Adds a stroked rectangle.
Arguments
Returns
Nothing.
Example
AddCircle
Method
Adds a stroked circle.
Arguments
Returns
Nothing.
Example
AddLine
Method
Adds a line.
Arguments
Returns
Nothing.
Example
AddLineMulticolor
Method
Adds a multicolor line.
Arguments
Returns
Nothing.
Example
AddRectRounded
Method
Adds a rounded, filled rectangle.
Arguments
Returns
Nothing.
Example
AddText
Method
Adds text.
Arguments
Returns
Nothing.
Example
OverrideClipRect
Method
Overrides clip rectangle with support of intersection.
Arguments
Returns
Nothing.
Example
AddWithBlur
Method
Renders a section with blur applied to it.
Arguments
Returns
Nothing.
Example
AddWithBlurShared
Method
Renders a section with blur applied to it. Uses a shared texture.
Arguments
Returns
Nothing.
Example
AddWithFrost
Method
Renders a section with a frosted effect to it, like in the Xmas theme.
Arguments
Returns
Nothing.
Example
C point.
col
Shape color.
Bottom right point.
bl
Bottom left point.
col
Shape color.
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.
C point.
cols
table[, , ]
Colors for each point. Colors go in the very same order as the parameter list.
table[, ]
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.
Bottom right point.
bl
Bottom left point.
cols
table[, ]
Colors for the gradient, applied from bottom to top.
float
The minimum radius of the pill's rounded edges.
radius_max
float
The maximum radius of the pill's rounded edges.
cols
table[, ]
Colors for the gradient, applied from bottom to top.
segments
int
The number of segments for approximating rounded edges. Defaults to 16.
float
Max opacity. Defaults to 0.25.
bool
Whether to draw a background for the rectangle. Defaults to true.