# Glossary RuneScape, RSPS, and codebase-specific terms that show up throughout 2009scape. ## Project / RuneScape terms - **RS2 / build 530** — the version of RuneScape 2 this project emulates, targeting content as it existed around **January 2009**. - **RSPS** — RuneScape Private Server; a third-party server emulating the game. - **Authenticity** — a core value: behavior should match the real ~Jan-2009 game, not invented mechanics. - **Cache** — the RuneScape game data archive (maps, models, item/NPC/object definitions). Read by `core.cache`. Edited with external tools (`Tools/`, Thanos, RSDataSuite). - **Client** — the game client that connects to this server; lives in a separate repo. - **World** — a running game instance. Multiple worlds can run with different ids; the websocket port defaults to `53594 + world_id`. ## Engine concepts - **Tick** — the fundamental time unit of the game loop (canonically 600 ms). Almost all timed logic is expressed in ticks. - **Pulse** — a unit of scheduled/repeating work (`core.game.system.task.Pulse`) submitted to `GameWorld.Pulser`; `pulse()` returns `true` when done. Movement, combat, skilling, and bot scripts are pulses. - **Node** — base type for anything in the world (`core.game.node`): entities, items, ground items, scenery. - **Entity** — a living `Node`: `Player` or `NPC`. - **AIPlayer** — a server-controlled fake player used to populate the world / for bots. - **Scenery** — a world object (tree, door, altar, etc.). - **Container** — an item collection (`inventory`, `equipment`, `bank`). - **Varp / Varbit** — RuneScape client state variables ("player variables" / bit-packed variables) used to drive interface and world state. Accessed via `getVarp`/`setVarp`, `VarbitDefinition`. - **Component / Interface / Widget** — an on-screen UI panel (ids from `Components`). - **Attribute** — arbitrary key/value state stored on a `Player`; prefix a key with `/save:` to persist it across logins. ## Content system - **ContentInterface** — the marker interface (`core.api.ContentInterface`) whose sub-types `ClassScanner` reflectively instantiates at startup. Implementing one is how content self-registers. - **ClassScanner** — startup component (`core.plugin.ClassScanner`) that uses **classgraph** to discover and load all content/plugins. - **InteractionListener** — content interface for reacting to player interactions with NPCs / scenery / items / ground items. - **InterfaceListener** — content interface for handling UI/widget button events. - **Commands** — content interface for registering `::command` chat commands, gated by **Privilege**. - **CommandSet** — engine-side grouping of commands, marked `@Initializable`. - **NPCBehavior** — per-NPC-id AI/combat behavior class. - **Plugin** — historically any auto-loaded content class; in legacy Java code see `core.plugin.Plugin` / `PluginManifest` / `@Initializable`. - **ConstLib** — external dependency (`org.rs09.consts.*`) providing named id constants (`Items`, `NPCs`, `Scenery`, `Animations`, `Components`, `Sounds`). ## Bots / self-botting - **Script** (`core.game.bots.Script`) — a bot automation routine with a `tick()` method. - **Self-botting** — a real player automating their own account via `::script`; permanently removes them from the highscores. Gated by the `enable_botting` config flag. - **`@PlayerCompatible`** — annotation marking a `Script` as runnable on a real player; such scripts appear in the `::scripts` menu. - **ScriptAPI** — automation helper API (`scriptAPI`) exposing movement, interaction, banking, GE, and overlay helpers to scripts. - **BottingOverlay** — the small progress panel a running script shows the player. - See [`BOT_SCRIPTING.md`](BOT_SCRIPTING.md) for the full system. ## Tooling / infra - **Thanos tool** — the required editor for the JSON game-data files; runs on **Java 11**. - **RSDataSuite** — cache/data tool bundled in `Tools/`. - **detekt** — Kotlin static analyzer run in `mvn verify` / CI (`Server/detekt.yml`). - **mvnw** — the Maven wrapper; source of truth for building. - **Thanos / Zaros jar** — same tool family for JSON editing (see README).