> For the complete documentation index, see [llms.txt](https://docs.centurion.best/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.centurion.best/macros/overview.md).

# Overview

Centurion supports source macros that are resolved during the obfuscation pass. They let you inject runtime guards, define stubs for development, and exclude specific functions from virtualization.

All macros are designed to be safe in plain source — define stubs inside an `if not CTN_OBFUSCATED` guard at the top of your script and your code will run normally before going through Centurion.

***

### Macros

| Macro                 | Type     | Description                                                         |
| --------------------- | -------- | ------------------------------------------------------------------- |
| `CTN_OBFUSCATED`      | Boolean  | `true` in an obfuscated build, `false` in plain source              |
| `CTN_CRASH()`         | Function | Immediately terminates execution with a unique generated snippet    |
| `CTN_NO_VIRTUALIZE()` | Function | Excludes a function from virtualization, running it as raw bytecode |

***

### Basic setup

Add this at the top of every script that uses Centurion macros.

```lua
if not CTN_OBFUSCATED then
    CTN_CRASH = function()
        error("crashed")
    end

    CTN_NO_VIRTUALIZE = function(...)
        return ...
    end
end
```

{% hint style="info" %}
This block is skipped entirely in obfuscated builds. Centurion replaces `CTN_OBFUSCATED` with `true` at build time, so the stubs are never used in production.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.centurion.best/macros/overview.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
