> ## Documentation Index
> Fetch the complete documentation index at: https://nonkit.rlaneth.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Limitations

> Understanding what nonkit can and cannot do

nonkit is a development tool with specific constraints. Understanding these limitations helps set appropriate expectations.

## No Package Export (Yet)

<Warning>
  The ability to export nonkit projects as standalone BepInEx plugins is **still in development**.
</Warning>

Currently, nonkit operates as a live development environment:

1. VS Code compiles and sends scripts to the game
2. The game plugin receives and executes them in real-time
3. Content exists only while VS Code is connected

Until the packager is ready:

* You cannot distribute your content to other players
* Content requires both VS Code with nonkit-vsc AND the game with nonkit-plugin
* There's no way to "export" a finished mod

<Note>
  A packager to compile nonkit projects into distributable BepInEx plugins is planned for a future release.
</Note>

## Platform Requirements

### Windows Only

nonkit uses Windows named pipes for communication between VS Code and the game. This means:

* **Windows is required** - Linux and macOS are not supported
* WSL (Windows Subsystem for Linux) may work but is untested
* The game and VS Code must run on the same machine

### Simultaneous Execution

Both components must run at the same time. VS Code (with nonkit-vsc) sends scripts to the running game (with nonkit-plugin) over a named pipe. This means you cannot:

* Pre-compile scripts for later use
* Run content without VS Code connected
* Queue scripts while the game is closed

## Game Dependency

### BepInEx Required

nonkit-plugin is a BepInEx plugin. You must:

1. Install BepInEx 6 in your NONMP game folder (NONMP is an IL2CPP game)
2. Place nonkit-plugin.dll in the plugins folder
3. Ensure BepInEx loads successfully on game start

### Gameplay State Required

The plugin only accepts commands during active gameplay:

* Must load a save file or start new game
* Main menus and loading screens don't process dialogue
* Some commands require specific game states (e.g., `start_battle` needs a valid battle context)

## API Volatility

<Warning>
  Command and function behavior is based on analysis of the game's early releases. NONMP is in **Early Access** and receives frequent updates.
</Warning>

This means:

* Commands may change signature or behavior
* Functions may return different values
* New features may be added, old ones removed
* Internal IDs (items, locations, characters) may shift

### What to Expect

| Stability     | Examples                                       |
| ------------- | ---------------------------------------------- |
| Likely stable | Basic dialogue, `char_creat`, `back_creat`     |
| May change    | Specific item IDs, character expression names  |
| Uncertain     | Advanced battle commands, internal game values |

Check release notes when updating either the game or nonkit.

## Content Limitations

### No New Assets

You cannot add:

* New character sprites or expressions
* New background images
* New music or sound effects
* New items or item icons

You can only reference existing game assets.

### Icon Workaround

The game loads map event icons based on the event's ID. Since custom events must use non-existing IDs to avoid overriding existing quests, and nonkit cannot yet inject custom resources, the game would fail to find an icon for your event.

The `Nonkit.IconSourceId` parameter works around this by specifying an existing event ID to borrow the icon from:

```json theme={null}
{
  "Nonkit": {
    "IconSourceId": 10084
  }
}
```

This tells the game to load the icon for event `10084` instead of looking for an icon matching your custom event's ID.

### Limited Table Support

Config tables are injected by matching the filename to the game's internal table name. Any table that follows the game's Luban data format can potentially be injected, but commonly used tables include:

* TbMapEvent (map events)
* TbCondition (unlock conditions)
* TbLocalizationAutoGenerated (localization strings for config data)

<Note>
  Tables must have records with either an `ID` (numeric) or `Key` (string) field for identification.
</Note>

## Script Merging

Scripts are merged in memory and can override game content. Game files are never modified, but changes made through nonkit (such as giving yourself items) will persist if you save your game.

Additional considerations:

* Node names must be unique across all scripts (yours and the game's)
* Conflicting node names will cause unpredictable behavior
* Use prefixes like `MyMod_` to avoid collisions

```yarn theme={null}
// Good - prefixed
title: MyMod_ShopEvent
---

// Risky - might conflict
title: ShopEvent
---
```

## Performance Considerations

* Large scripts may take longer to compile and transfer
* Many simultaneous events could impact game performance
* The named pipe has a message size limit (varies by system)

For complex projects, split content across multiple files and nodes.

## Summary

| Capability              | Status            |
| ----------------------- | ----------------- |
| Live script development | Yes               |
| Hot reload dialogue     | Yes               |
| Custom map events       | Yes               |
| Standalone mod export   | No                |
| Cross-platform          | No (Windows only) |
| New assets              | No                |
| Offline mode            | No                |

## Working Within Limits

Despite these constraints, nonkit enables:

<CardGroup cols={2}>
  <Card title="Rapid Prototyping" icon="bolt">
    Test dialogue and quest ideas instantly without restarting the game.
  </Card>

  <Card title="Content Exploration" icon="magnifying-glass">
    Learn how the game's dialogue system works by experimenting.
  </Card>

  <Card title="Personal Projects" icon="user">
    Create custom content for your own playthroughs.
  </Card>

  <Card title="Future Modding" icon="seedling">
    Prepare content that can be packaged when export tools are available.
  </Card>
</CardGroup>
