Full Code of runejs/server for AI

develop 3c1e6a757e73 cached
488 files
31.1 MB
610.3k tokens
1104 symbols
1 requests
Download .txt
Showing preview only (2,437K chars total). Download the full file or copy to clipboard to get everything.
Repository: runejs/server
Branch: develop
Commit: 3c1e6a757e73
Files: 488
Total size: 31.1 MB

Directory structure:
gitextract__j1tb7oh/

├── .dockerignore
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug-report.md
│   │   ├── content-feature-plugin.md
│   │   └── game-engine-feature.md
│   └── workflows/
│       └── build.yml
├── .gitignore
├── .swcrc
├── .vscode/
│   └── settings.json
├── CONTRIBUTING.md
├── Dockerfile
├── FEATURES.md
├── LICENSE
├── README.md
├── biome.json
├── cache/
│   ├── file-names.properties
│   ├── main_file_cache.dat0
│   ├── main_file_cache.dat1
│   ├── main_file_cache.dat2
│   ├── main_file_cache.idx0
│   ├── main_file_cache.idx1
│   ├── main_file_cache.idx10
│   ├── main_file_cache.idx11
│   ├── main_file_cache.idx12
│   ├── main_file_cache.idx2
│   ├── main_file_cache.idx255
│   ├── main_file_cache.idx3
│   ├── main_file_cache.idx4
│   ├── main_file_cache.idx5
│   ├── main_file_cache.idx6
│   ├── main_file_cache.idx7
│   ├── main_file_cache.idx8
│   └── main_file_cache.idx9
├── config/
│   ├── file-names.properties
│   └── server-config.example.json
├── data/
│   ├── config/
│   │   ├── combat-styles.json
│   │   ├── examine-item-data.yaml
│   │   ├── item-spawns/
│   │   │   └── lumbridge/
│   │   │       └── lumbridge.json
│   │   ├── items/
│   │   │   ├── barrows/
│   │   │   │   └── dharoks.json
│   │   │   ├── bolts.json
│   │   │   ├── bones.json
│   │   │   ├── containers.json
│   │   │   ├── currency.json
│   │   │   ├── equipment/
│   │   │   │   ├── amulets.json
│   │   │   │   ├── axes.json
│   │   │   │   ├── bows.json
│   │   │   │   ├── capes.json
│   │   │   │   ├── daggers.json
│   │   │   │   ├── darts.json
│   │   │   │   ├── halberd.json
│   │   │   │   ├── hammers.json
│   │   │   │   ├── hatchets.json
│   │   │   │   ├── hats.json
│   │   │   │   ├── javelins.json
│   │   │   │   ├── leather-armour.json
│   │   │   │   ├── longswords.json
│   │   │   │   ├── mauls.json
│   │   │   │   ├── pickaxes.json
│   │   │   │   ├── shortswords.json
│   │   │   │   ├── skillscapes.json
│   │   │   │   ├── slayer.json
│   │   │   │   ├── spears.json
│   │   │   │   ├── staffs.json
│   │   │   │   ├── standard-metals/
│   │   │   │   │   ├── adamant-armour.json
│   │   │   │   │   ├── black-armour.json
│   │   │   │   │   ├── bronze-armour.json
│   │   │   │   │   ├── bronze-weapons.json
│   │   │   │   │   ├── iron-armour.json
│   │   │   │   │   ├── iron-weapons.json
│   │   │   │   │   ├── mithril-armour.json
│   │   │   │   │   ├── mithril-weapons.json
│   │   │   │   │   ├── rune-armour.json
│   │   │   │   │   ├── rune-god-armour.json
│   │   │   │   │   ├── steel-armour.json
│   │   │   │   │   ├── steel-weapons.json
│   │   │   │   │   └── white-armour.json
│   │   │   │   ├── tiaras.json
│   │   │   │   ├── training.json
│   │   │   │   └── whips.json
│   │   │   ├── food.json
│   │   │   ├── holiday/
│   │   │   │   └── partyhats.json
│   │   │   ├── icons.json
│   │   │   ├── logs.json
│   │   │   ├── other.json
│   │   │   ├── quests/
│   │   │   │   ├── lost-city.json
│   │   │   │   └── witchs-potion.json
│   │   │   └── skills/
│   │   │       ├── artisan-tools.json
│   │   │       ├── baking.json
│   │   │       ├── cooking.json
│   │   │       ├── crafting/
│   │   │       │   ├── gems.json
│   │   │       │   └── jewelery-moulds.json
│   │   │       ├── firemaking.json
│   │   │       ├── fishing.json
│   │   │       ├── fletching/
│   │   │       │   ├── arrows.json
│   │   │       │   └── bolts.json
│   │   │       ├── herblore/
│   │   │       │   ├── herbs.json
│   │   │       │   ├── ingredients.json
│   │   │       │   └── tools.json
│   │   │       ├── herblore.json
│   │   │       ├── mining.json
│   │   │       ├── prayer.json
│   │   │       └── runecrafting.json
│   │   ├── music/
│   │   │   └── musicRegions.json
│   │   ├── npc-spawns/
│   │   │   ├── alkharid/
│   │   │   │   └── alkharid-general.json
│   │   │   ├── ardougne/
│   │   │   │   ├── bankers.json
│   │   │   │   ├── guards.json
│   │   │   │   └── market.json
│   │   │   ├── camelot/
│   │   │   │   └── bankers.json
│   │   │   ├── canifis/
│   │   │   │   └── bankers.json
│   │   │   ├── catherby/
│   │   │   │   └── bankers.json
│   │   │   ├── draynor/
│   │   │   │   └── bankers.json
│   │   │   ├── edgeville/
│   │   │   │   └── bankers.json
│   │   │   ├── falador/
│   │   │   │   ├── bankers.json
│   │   │   │   └── guards.json
│   │   │   ├── keldagrim/
│   │   │   │   └── bankers.json
│   │   │   ├── lumbridge/
│   │   │   │   ├── bankers.json
│   │   │   │   ├── lumbridge-general.json
│   │   │   │   ├── lumbridge-goblins.json
│   │   │   │   └── lumbridge-sheep.json
│   │   │   ├── magebank/
│   │   │   │   └── bankers.json
│   │   │   ├── nardah/
│   │   │   │   └── bankers.json
│   │   │   ├── pestcontrol/
│   │   │   │   └── bankers.json
│   │   │   ├── portsarim/
│   │   │   │   └── port-sarim-general.json
│   │   │   ├── rimmington/
│   │   │   │   └── rimmington.json
│   │   │   ├── shilovillage/
│   │   │   │   └── bankers.json
│   │   │   ├── varrock/
│   │   │   │   ├── bankers.json
│   │   │   │   ├── blue-moon-inn.json
│   │   │   │   └── varrock-general.json
│   │   │   └── yanille/
│   │   │       └── bankers.json
│   │   ├── npcs/
│   │   │   ├── alkharid.json
│   │   │   ├── ardougne.json
│   │   │   ├── bankers.json
│   │   │   ├── barbarians.json
│   │   │   ├── general.json
│   │   │   ├── generic-humans.json
│   │   │   ├── goblins.json
│   │   │   ├── guards.json
│   │   │   ├── lumbridge.json
│   │   │   ├── port-sarim.json
│   │   │   ├── rimmington.json
│   │   │   ├── sheep.json
│   │   │   └── varrock.json
│   │   ├── scenery-spawns.yaml
│   │   ├── shops/
│   │   │   ├── alkharid/
│   │   │   │   ├── alkharid-gem-trader.json
│   │   │   │   ├── dommiks-crafting-store.json
│   │   │   │   ├── louies-armored-legs.json
│   │   │   │   └── ranaels-skirt-store.json
│   │   │   ├── lumbridge/
│   │   │   │   ├── bobs-axes.json
│   │   │   │   └── lumbridge-general-store.json
│   │   │   ├── portsarim/
│   │   │   │   └── bettys-magic-emporium.json
│   │   │   ├── shilo-village/
│   │   │   │   └── oblis-general-store.json
│   │   │   └── varrock/
│   │   │       └── zaffs-staffs.json
│   │   ├── travel-locations-data.yaml
│   │   ├── widgets.json
│   │   └── xteas/
│   │       └── 435.json
│   └── saves/
│       └── .gitkeep
├── docker-compose.yml
├── jest.config.ts
├── nodemon.json
├── package.json
├── src/
│   ├── engine/
│   │   ├── action/
│   │   │   ├── action-pipeline.ts
│   │   │   ├── hook/
│   │   │   │   ├── action-hook.ts
│   │   │   │   ├── hook-filters.test.ts
│   │   │   │   ├── hook-filters.ts
│   │   │   │   └── task.ts
│   │   │   ├── loader.ts
│   │   │   └── pipe/
│   │   │       ├── button.action.ts
│   │   │       ├── equipment-change.action.ts
│   │   │       ├── item-interaction.action.ts
│   │   │       ├── item-on-item.action.ts
│   │   │       ├── item-on-npc.action.ts
│   │   │       ├── item-on-object.action.ts
│   │   │       ├── item-on-player.action.ts
│   │   │       ├── item-on-world-item.action.ts
│   │   │       ├── item-swap.action.ts
│   │   │       ├── magic-on-npc.action.ts
│   │   │       ├── move-item.action.ts
│   │   │       ├── npc-init.action.ts
│   │   │       ├── npc-interaction.action.ts
│   │   │       ├── object-interaction.action.ts
│   │   │       ├── player-command.action.ts
│   │   │       ├── player-init.action.ts
│   │   │       ├── player-interaction.action.ts
│   │   │       ├── prayer.action.ts
│   │   │       ├── region-change.action.ts
│   │   │       ├── spawned-item-interaction.action.ts
│   │   │       ├── task/
│   │   │       │   ├── queueable-task.ts
│   │   │       │   ├── walk-to-actor-plugin-task.ts
│   │   │       │   ├── walk-to-item-plugin-task.ts
│   │   │       │   └── walk-to-object-plugin-task.ts
│   │   │       └── widget-interaction.action.ts
│   │   ├── config/
│   │   │   ├── config-handler.ts
│   │   │   ├── data-dump.ts
│   │   │   ├── directories.ts
│   │   │   ├── item-config.ts
│   │   │   ├── item-spawn-config.ts
│   │   │   ├── music-regions-config.ts
│   │   │   ├── npc-config.ts
│   │   │   ├── npc-spawn-config.ts
│   │   │   ├── quest-config.ts
│   │   │   ├── shop-config.testskip.ts
│   │   │   └── shop-config.ts
│   │   ├── interface/
│   │   │   └── interface-state.ts
│   │   ├── net/
│   │   │   ├── inbound-packet-handler.ts
│   │   │   ├── inbound-packets/
│   │   │   │   ├── add-friend.packet.ts
│   │   │   │   ├── add-ignore.packet.ts
│   │   │   │   ├── blinking-tab-click.packet.ts
│   │   │   │   ├── button-click.packet.ts
│   │   │   │   ├── character-design.packet.ts
│   │   │   │   ├── chat.packet.ts
│   │   │   │   ├── command.packet.ts
│   │   │   │   ├── drop-item.packet.ts
│   │   │   │   ├── examine.packet.ts
│   │   │   │   ├── item-interaction.packet.ts
│   │   │   │   ├── item-on-item.packet.ts
│   │   │   │   ├── item-on-npc.packet.ts
│   │   │   │   ├── item-on-object.packet.ts
│   │   │   │   ├── item-on-player.packet.ts
│   │   │   │   ├── item-on-world-item.packet.ts
│   │   │   │   ├── item-swap.packet.ts
│   │   │   │   ├── junk.packet.ts
│   │   │   │   ├── magic-attack.packet.ts
│   │   │   │   ├── npc-interaction.packet.ts
│   │   │   │   ├── number-input.packet.ts
│   │   │   │   ├── object-interaction.packet.ts
│   │   │   │   ├── pickup-item.packet.ts
│   │   │   │   ├── player-interaction.packet.ts
│   │   │   │   ├── private-message.packet.ts
│   │   │   │   ├── remove-friend.packet.ts
│   │   │   │   ├── remove-ignore.packet.ts
│   │   │   │   ├── social-button.packet.ts
│   │   │   │   ├── walk.packet.ts
│   │   │   │   ├── widget-interaction.packet.ts
│   │   │   │   └── widgets-closed.packet.ts
│   │   │   ├── isaac.ts
│   │   │   ├── outbound-packet-handler.ts
│   │   │   └── packet.ts
│   │   ├── plugins/
│   │   │   ├── content-plugin.ts
│   │   │   ├── loader.ts
│   │   │   └── reload-content.ts
│   │   ├── task/
│   │   │   ├── README.md
│   │   │   ├── impl/
│   │   │   │   ├── actor-actor-interaction-task.ts
│   │   │   │   ├── actor-landscape-object-interaction-task.ts
│   │   │   │   ├── actor-task.ts
│   │   │   │   ├── actor-teleport-task.ts
│   │   │   │   ├── actor-walk-to-task.ts
│   │   │   │   └── actor-world-item-interaction-task.ts
│   │   │   ├── task-scheduler.test.ts
│   │   │   ├── task-scheduler.ts
│   │   │   ├── task.test.ts
│   │   │   ├── task.ts
│   │   │   ├── types.ts
│   │   │   └── utils/
│   │   │       └── _testing.ts
│   │   ├── util/
│   │   │   ├── address.ts
│   │   │   ├── colors.ts
│   │   │   ├── data.ts
│   │   │   ├── error-handling.ts
│   │   │   ├── files.ts
│   │   │   ├── num.ts
│   │   │   ├── objects.ts
│   │   │   ├── queue.test.ts
│   │   │   ├── queue.ts
│   │   │   ├── strings.ts
│   │   │   ├── time.ts
│   │   │   └── varbits.ts
│   │   └── world/
│   │       ├── actor/
│   │       │   ├── actor.ts
│   │       │   ├── combat.ts
│   │       │   ├── dialogue.ts
│   │       │   ├── magic.ts
│   │       │   ├── metadata.ts
│   │       │   ├── npc.ts
│   │       │   ├── pathfinding.ts
│   │       │   ├── player/
│   │       │   │   ├── achievements.ts
│   │       │   │   ├── attack.ts
│   │       │   │   ├── cutscenes.ts
│   │       │   │   ├── dialogue-action.ts
│   │       │   │   ├── metadata.ts
│   │       │   │   ├── model.ts
│   │       │   │   ├── player-data.ts
│   │       │   │   ├── player.ts
│   │       │   │   ├── private-messaging.ts
│   │       │   │   ├── quest.ts
│   │       │   │   └── sync/
│   │       │   │       ├── actor-sync.ts
│   │       │   │       ├── npc-sync-task.ts
│   │       │   │       └── player-sync-task.ts
│   │       │   ├── prayer.ts
│   │       │   ├── skills.ts
│   │       │   ├── update-flags.ts
│   │       │   ├── util.ts
│   │       │   └── walking-queue.ts
│   │       ├── config/
│   │       │   ├── animation-ids.ts
│   │       │   ├── examine-data.ts
│   │       │   ├── gfx-ids.ts
│   │       │   ├── harvest-tool.ts
│   │       │   ├── harvestable-object.ts
│   │       │   ├── item-ids.ts
│   │       │   ├── object-ids.ts
│   │       │   ├── scenery-spawns.ts
│   │       │   ├── songs.ts
│   │       │   ├── sound-ids.ts
│   │       │   ├── travel-locations.ts
│   │       │   └── widget.ts
│   │       ├── direction.ts
│   │       ├── index.ts
│   │       ├── instances.ts
│   │       ├── items/
│   │       │   ├── item-container.ts
│   │       │   ├── item.ts
│   │       │   └── world-item.ts
│   │       ├── map/
│   │       │   ├── chunk-manager.ts
│   │       │   ├── chunk.ts
│   │       │   ├── collision-map.ts
│   │       │   ├── landscape-object.ts
│   │       │   └── region.ts
│   │       ├── position.ts
│   │       ├── skill-util/
│   │       │   ├── glory-boost.ts
│   │       │   ├── harvest-roll.ts
│   │       │   └── harvest-skill.ts
│   │       ├── sound/
│   │       │   └── music.ts
│   │       ├── task.ts
│   │       └── world.ts
│   ├── plugins/
│   │   ├── buttons/
│   │   │   ├── logout-button.plugin.ts
│   │   │   ├── magic-attack.plugin.ts
│   │   │   ├── magic-teleports.plugin.ts
│   │   │   ├── player-emotes.plugin.ts
│   │   │   └── player-setting-button.plugin.ts
│   │   ├── combat/
│   │   │   └── combat-styles.plugin.ts
│   │   ├── commands/
│   │   │   ├── bank-command.plugin.ts
│   │   │   ├── camera-commands.plugin.ts
│   │   │   ├── clear-inventory-command.plugin.ts
│   │   │   ├── client-config-command.plugin.ts
│   │   │   ├── current-position-command.plugin.ts
│   │   │   ├── data-dump-command.plugin.ts
│   │   │   ├── dump-metadata-command.plugin.ts
│   │   │   ├── give-item-command.plugin.ts
│   │   │   ├── groups-debug.plugin.ts
│   │   │   ├── pathing-commands.plugin.ts
│   │   │   ├── player-animation-command.plugin.ts
│   │   │   ├── player-graphics-command.plugin.ts
│   │   │   ├── quest-list-command.plugin.ts
│   │   │   ├── region-debug-commands.plugin.ts
│   │   │   ├── reset-camera-command.plugin.ts
│   │   │   ├── sound-song-commands.plugin.ts
│   │   │   ├── spawn-npc-command.plugin.ts
│   │   │   ├── spawn-scenery-command.plugin.ts
│   │   │   ├── spawn-test-players-command.plugin.ts
│   │   │   ├── stat-commands.plugin.ts
│   │   │   ├── teleport-command.plugin.ts
│   │   │   ├── transform-command.plugin.ts
│   │   │   ├── travel-back-command.plugin.ts
│   │   │   ├── travel-command.plugin.ts
│   │   │   └── widget-commands.plugin.ts
│   │   ├── dialogue/
│   │   │   ├── dialogue-option.plugin.ts
│   │   │   └── item-selection.plugin.ts
│   │   ├── items/
│   │   │   ├── buckets/
│   │   │   │   ├── empty-container.plugin.ts
│   │   │   │   └── fill-container.plugin.ts
│   │   │   ├── capes/
│   │   │   │   └── skillcape-emotes.plugin.ts
│   │   │   ├── consumables/
│   │   │   │   └── eating.plugin.ts
│   │   │   ├── drop-item.plugin.ts
│   │   │   ├── equipment/
│   │   │   │   ├── equip-item.plugin.ts
│   │   │   │   ├── equipment-stats.plugin.ts
│   │   │   │   └── unequip-item.plugin.ts
│   │   │   ├── herblore/
│   │   │   │   └── clean-herb.ts
│   │   │   ├── move-item.plugin.ts
│   │   │   ├── pickup-item.plugin.ts
│   │   │   ├── pots/
│   │   │   │   └── empty-pot.plugin.ts
│   │   │   ├── rotten-potato/
│   │   │   │   ├── helpers/
│   │   │   │   │   ├── rotten-potato-helpers.ts
│   │   │   │   │   └── rotten-potato-travel.ts
│   │   │   │   ├── hooks/
│   │   │   │   │   ├── rotten-potato-command-hook.ts
│   │   │   │   │   ├── rotten-potato-eat.ts
│   │   │   │   │   ├── rotten-potato-item-on-item.ts
│   │   │   │   │   ├── rotten-potato-item-on-player.ts
│   │   │   │   │   └── rotten-potato-peel.ts
│   │   │   │   └── rotten-potato.plugin.ts
│   │   │   ├── runecrafting/
│   │   │   │   └── tiaras.plugin.ts
│   │   │   ├── shopping/
│   │   │   │   ├── buy-from-shop.plugin.ts
│   │   │   │   ├── item-value.plugin.ts
│   │   │   │   └── sell-to-shop.plugin.ts
│   │   │   └── swap-items.plugin.ts
│   │   ├── music/
│   │   │   ├── music-regions.plugin.ts
│   │   │   └── music-tab.plugin.ts
│   │   ├── npcs/
│   │   │   ├── al-kharid/
│   │   │   │   ├── dommik-crafting-shop.plugin.ts
│   │   │   │   ├── gem-trader.plugin.ts
│   │   │   │   ├── karim.plugin.ts
│   │   │   │   ├── louie-armoured-legs.plugin.ts
│   │   │   │   └── ranael-super-skirt.plugin.ts
│   │   │   ├── falador/
│   │   │   │   └── custom-guards.plugin.ts
│   │   │   ├── lumbridge/
│   │   │   │   ├── bob.plugin.ts
│   │   │   │   ├── hans.plugin.ts
│   │   │   │   ├── lumbridge-farm-helpers.plugin.ts
│   │   │   │   └── shopkeeper.plugin.ts
│   │   │   ├── port-sarim/
│   │   │   │   └── betty.plugin.ts
│   │   │   └── varrock/
│   │   │       ├── blue-moon-inn.plugin.ts
│   │   │       ├── master-smithing-tutor.plugin.ts
│   │   │       ├── wilough.plugin.ts
│   │   │       └── zaff-superior-staffs.plugin.ts
│   │   ├── objects/
│   │   │   ├── bank/
│   │   │   │   ├── bank.plugin.ts
│   │   │   │   └── deposit-box.plugin.ts
│   │   │   ├── cows/
│   │   │   │   └── cow.plugin.ts
│   │   │   ├── crates/
│   │   │   │   └── crates.plugin.ts
│   │   │   ├── doors/
│   │   │   │   ├── door.plugin.ts
│   │   │   │   ├── double-door.plugin.ts
│   │   │   │   └── gate.plugin.ts
│   │   │   ├── dungeon-entrances/
│   │   │   │   └── taverly-dungeon-ladder.plugin.ts
│   │   │   ├── item-spawns/
│   │   │   │   └── take-axe.plugin.ts
│   │   │   ├── ladders/
│   │   │   │   └── ladder.plugin.ts
│   │   │   ├── mill/
│   │   │   │   ├── flour-bin.plugin.ts
│   │   │   │   ├── hopper-controls.plugin.ts
│   │   │   │   └── hopper.plugin.ts
│   │   │   └── pickables/
│   │   │       └── pickables.plugin.ts
│   │   ├── player/
│   │   │   ├── follow-player.plugin.js
│   │   │   ├── login-unlock-emotes.plugin.ts
│   │   │   ├── login-update-settings.plugin.ts
│   │   │   └── update-friends-list.plugin.ts
│   │   ├── quests/
│   │   │   ├── cooks-assistant-quest.plugin.ts
│   │   │   ├── goblin-diplomacy-tutorial/
│   │   │   │   ├── goblin-diplomacy-quest.plugin.ts
│   │   │   │   ├── melee-tutor-dialogue.ts
│   │   │   │   ├── runescape-guide-dialogue.ts
│   │   │   │   └── stage-handler.ts
│   │   │   ├── quest-journal.plugin.ts
│   │   │   └── witchs-potion-quest.plugin.ts
│   │   └── skills/
│   │       ├── construction/
│   │       │   ├── con-constants.ts
│   │       │   ├── home-saver.ts
│   │       │   ├── house.ts
│   │       │   ├── index.ts
│   │       │   ├── room-builder.ts
│   │       │   └── util.ts
│   │       ├── crafting/
│   │       │   ├── sheep-plugin.plugin.ts
│   │       │   └── spinning-wheel.plugin.ts
│   │       ├── firemaking/
│   │       │   ├── chance.ts
│   │       │   ├── data.ts
│   │       │   ├── firemaking-task.ts
│   │       │   ├── index.ts
│   │       │   ├── light-fire.ts
│   │       │   └── types.ts
│   │       ├── fletching/
│   │       │   ├── fletching-constants.ts
│   │       │   ├── fletching-types.ts
│   │       │   └── fletching.plugin.ts
│   │       ├── level-up-dialogue.plugin.ts
│   │       ├── mining/
│   │       │   ├── chance.ts
│   │       │   ├── mining-task.ts
│   │       │   ├── mining.plugin.ts
│   │       │   └── prospecting.plugin.ts
│   │       ├── prayer/
│   │       │   └── bury-bones.plugin.ts
│   │       ├── runecrafting/
│   │       │   ├── runecrafting-altar.plugin.ts
│   │       │   ├── runecrafting-constants.ts
│   │       │   ├── runecrafting-crafting.plugin.ts
│   │       │   ├── runecrafting-tiara.plugin.ts
│   │       │   └── runecrafting-types.ts
│   │       ├── skill-guides/
│   │       │   ├── Strength.json
│   │       │   ├── agility.json
│   │       │   ├── attack.json
│   │       │   ├── construction.json
│   │       │   ├── cooking.json
│   │       │   ├── crafting.json
│   │       │   ├── defence.json
│   │       │   ├── farming.json
│   │       │   ├── firemaking.json
│   │       │   ├── fishing.json
│   │       │   ├── fletching.json
│   │       │   ├── herblore.json
│   │       │   ├── hitpoint.json
│   │       │   ├── magic.json
│   │       │   ├── mining.json
│   │       │   ├── prayer.json
│   │       │   ├── ranged.json
│   │       │   ├── runecrafting.json
│   │       │   ├── skill-guide-config.ts
│   │       │   ├── skill-guides.plugin.ts
│   │       │   ├── slayer.json
│   │       │   ├── smithing.json
│   │       │   ├── thieving.json
│   │       │   └── woodcutting.json
│   │       ├── smithing/
│   │       │   ├── forging-constants.ts
│   │       │   ├── forging-task.ts
│   │       │   ├── forging-types.ts
│   │       │   ├── forging.plugin.ts
│   │       │   ├── smelting-constants.ts
│   │       │   ├── smelting-task.ts
│   │       │   ├── smelting-types.ts
│   │       │   └── smelting.plugin.ts
│   │       └── woodcutting/
│   │           ├── chance.ts
│   │           ├── index.ts
│   │           └── woodcutting-task.ts
│   └── server/
│       ├── game/
│       │   ├── game-server-config.ts
│       │   ├── game-server-connection.ts
│       │   └── game-server.ts
│       ├── gateway/
│       │   └── gateway-server.ts
│       └── runner.ts
└── tsconfig.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .dockerignore
================================================
node_modules
npm-debug.log
.gitignore


================================================
FILE: .github/ISSUE_TEMPLATE/bug-report.md
================================================
---
name: Bug Report
about: Create a report to help us improve
title: "[BUG]"
labels: bug
assignees: ''

---

**Describe the bug**
A clear and concise description of what the bug is.

**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error

**Expected behavior**
A clear and concise description of what you expected to happen.

**Screenshots**
If applicable, add screenshots to help explain your problem.

**Additional context**
Add any other context about the problem here.


================================================
FILE: .github/ISSUE_TEMPLATE/content-feature-plugin.md
================================================
---
name: Content Feature/Plugin
about: New game content features or plugin requests
title: "[CONTENT]"
labels: enhancement, needs workshopping
assignees: ''

---

### Content/Plugin Description
> Example: As a player, I expect to receive a bucket of milk when I click to milk a cow while having a bucket in my inventory.

###  Acceptance Criteria
> Any criteria required to consider this new plugin or feature completed.
- [ ] required item 1
- [ ] required item 2
- [ ] required item 3

## Additional Information
> Other additional details relevant to the new feature that were not described above.


================================================
FILE: .github/ISSUE_TEMPLATE/game-engine-feature.md
================================================
---
name: Game Engine Feature
about: New game engine or content API features
title: "[ENGINE] "
labels: needs workshopping, new feature
assignees: ''

---

### Game Engine Feature Description
> Example: As a plugin developer, I expect to be able to be able to hook into the player init event.

###  Acceptance Criteria
> Any criteria required to consider this new feature completed.
- [ ] required item 1
- [ ] required item 2
- [ ] required item 3

## Additional Information
> Other additional details relevant to the new feature that were not described above.


================================================
FILE: .github/workflows/build.yml
================================================
name: Check & Build Project

on:
    pull_request:
        branches: [ master, develop, feature/** ]
    push:
        branches: [ master, develop ]

jobs:
    build:
        runs-on: ubuntu-latest

        steps:
            -   name: Checkout Repository
                uses: actions/checkout@v2

            -   name: Setup Node
                uses: actions/setup-node@v1
                with:
                    node-version: '24.x'

            -   name: Install Node Modules
                run: npm i

            -   name: Run Linter
                run: npm run lint:fin

            -   name: Run Formatter
                run: npm run format:fin

            -   name: Run Tests
                run: npm run test:fin

            -   name: Run Typecheck
                run: npm run typecheck

            -   name: Build Project
                run: npm run build


================================================
FILE: .gitignore
================================================
node_modules
.DS_Store
/dist
/data/dump
/data/houses
/data/saves/*.json
/config/server-config.json
server-config.yaml

# local env files
.env.local
.env.*.local

# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Editor directories.ts and files
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
/.vs

/coverage/

================================================
FILE: .swcrc
================================================
{
    "$schema": "https://swc.rs/schema.json",
    "exclude": "node_modules/",
    "sourceMaps": true,
    "module": {
        "type": "commonjs"
    },
    "jsc": {
        "target": "esnext",
        "baseUrl": "./src",
        "paths": {
            "@engine/*": ["./engine/*"],
            "@plugins/*": ["./plugins/*"],
            "@server/*": ["./server/*"]
        },
        "parser": {
            "syntax": "typescript",
            "tsx": false,
            "decorators": true,
            "dynamicImport": false
        }
    }
}


================================================
FILE: .vscode/settings.json
================================================
{
    "editor.tabSize": 4,
    "files.trimTrailingWhitespace": true,
    "files.trimFinalNewlines": true,
    "files.insertFinalNewline": true
}


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to RuneJS

RuneJS was created with the intention of utilizing JavaScript/TypeScript and Node's innovative features. RxJS was imported for reactive programming as well, opening up opportunities for easy content development. As such, there are a few things we're looking to avoid...

1. Direct ports/copying from Java servers
    - This defeats the purpose of RuneJS by implementing basic flows that any regular Java-based server would use. Think outside the box and really utilize ES6, TypeScript, Node, and RxJS! :)
2. Additional/outside dependencies
    - Sometimes additional dependencies cannot be avoided, but we'd like to avoid them as much as possible. RuneJS intends to be simple and easy for anyone to pick up, without requiring the user to set up any databases or additional third party systems.
    - In some cases this is of course unavoidable, as such we'll handle them on a case-by-case basis.

Ultimately if you're looking to contribute, it's best to check in with us on Discord to see if we're already working on a specific feature or have plans for it already. Add us at **Tyn#0001**

## Code Style

Code style (linting and formatting) are handled by [Biome](https://biomejs.dev/). It is recommended that you install [the Biome extension for your IDE](https://biomejs.dev/guides/editors/first-party-extensions/).

Running `npm run fin` will perform all necessary checks (linting, formatting, typechecking and tests).

## Testing

Unit tests can be written using Jest. To execute the test suite, run `npm test`

- Test files should be located next to the file under test, and called `file-name.test.ts`
- Tests should use the `when / then` pattern made up of composable `describe` statements
- Make use of `beforeEach` to set up state before each test

After running the tests, you can find code coverage in the `./coverage/` folder.

### When / Then testing pattern

Tests should be broken down into a series of `describe` statements, which set up their own internal state when possible.

```ts
describe('when there is a player', () => {
  let player: Player

  beforeEach(() => {
    player = createMockPlayer()
  })

  describe('when player is wearing a hat', () => {
    beforeEach(() => {
      player.equipment().set(0, someHatItem)
    })

    test('should return true', () => {
      const result = isWearingHat(player)

      expect(result).toEqual(true)
    })
  })
})
```

There are two main benefits to this kind of design:

- It serves as living documentation: from reading the `beforeEach` block you can clearly see how the prerequisite of "player is wearing a hat" is achieved
- It allows for easy expansion of test cases: future developers can add further
  statements inside "when player is wearing a hat" if they want to make use of
  that setup


================================================
FILE: Dockerfile
================================================
FROM node:24
WORKDIR /usr/src/app
COPY package.json ./
COPY package-lock.json ./

RUN apt update
RUN apt install -y libsdl-pango-dev

RUN npm ci

COPY src ./src
COPY tsconfig.json ./
COPY .swcrc ./

RUN npm run build

EXPOSE 43594
CMD [ "npm", "run", "start:standalone" ]


================================================
FILE: FEATURES.md
================================================
[![RuneJS Discord Server](https://img.shields.io/discord/678751302297059336?label=RuneJS%20Discord&logo=discord)](https://discord.gg/5P74nSh)


![RuneJS](https://i.imgur.com/pmkdSfc.png)

# RuneJS Feature List

## Game Server

* RSA + ISAAC ciphering :heavy_check_mark:
* Game Update Server :heavy_check_mark:
* Authentication Server :heavy_check_mark:
* Server side cache loading :heavy_check_mark:
    * Client pathing validation via cache mapdata :heavy_check_mark:
    * Item/object/npc definitions :heavy_check_mark:
* Packet queueing  :heavy_check_mark:

### Technical Features

* Asynchronous server infrastructure w/ Promises & RxJS Observables
* A diverse TypeScript plugin system for easily writing new content based off of in-game actions
* A simplified JavaScript plugin system for quickly and easily bootstrapping game content
* Flexible quest and dialogue systems for more advanced content development
* Code compilation via Babel, offering more seamless compilation and redeployment of plugins

## Game World

* Private & group Player Instances :heavy_check_mark:
* Personal player instance objects and world items :heavy_check_mark:
* Bank :heavy_check_mark:
    * Withdraw/Deposit 1,5,10,All :heavy_check_mark:
    * As note  :heavy_check_mark:
    * Swap slot :heavy_check_mark:
    * Insert mode: :heavy_check_mark:
    * Deposit box :heavy_check_mark:
* Audio :yellow_square:
    * Music :yellow_square:
        * Playing music :heavy_check_mark:
        * Music Regions :x:
        * Music Player tab :x:
    * Sounds :yellow_square:
        * Playing sounds :heavy_check_mark:
        * Sound effects for actions :yellow_square:
* Home Teleport :heavy_check_mark:
* Emotes :heavy_check_mark:
    * Skillcape emotes :heavy_check_mark:
    * Unlockable emotes w/ requirements :heavy_check_mark:
* Shop support :heavy_check_mark:
* Inventory support :heavy_check_mark:
    * Swapping items :heavy_check_mark:
    * Dropping items :heavy_check_mark:
    * Picking up ground items :heavy_check_mark:
    * Equipping items :heavy_check_mark:
* Doors/gates :yellow_square:
    * NSEW doors :heavy_check_mark:
    * Diagonal doors :yellow_square:
    * Double doors :heavy_check_mark:
    * Wooden gates :heavy_check_mark:
* Climbing ladders & stairs :yellow_square:
* Clue Scrolls :x:

### Quests
* Cook's Assistant :heavy_check_mark:

### Skills

* Combat :yellow_square:
    * Melee :yellow_square:
    * Ranged :x:
    * Magic :x:
* Prayer :x:
* Cooking :x:
* Fletching :x:
* Fishing :x:
* Firemaking :yellow_square:
    * Fire lighting :yellow_square:
    * Chain fires w/ movement :yellow_square:
* Herblore :x:
* Agility :x:
* Thieving :x:
* Slayer :x:
* Farming :x:
* Runecrafting :x:
* Construction :x:
* Woodcutting :yellow_square:
    * Formula for success :heavy_check_mark:
    * Chopping Trees :heavy_check_mark:
    * Axes :heavy_check_mark:
    * Birds nests  :heavy_check_mark:
    * Stump ids :yellow_square:
    * Canoes :x:
* Mining :yellow_square:
    * Formula for success :heavy_check_mark:
    * Mining ores :heavy_check_mark:
    * Pickaxes :heavy_check_mark:
    * Random gems  :heavy_check_mark:
    * Gem ores :heavy_check_mark:
    * Essence mining :heavy_check_mark:
    * Empty Rock ids :yellow_square:
* Crafting :yellow_square:
    * Spinning wheel :heavy_check_mark:
* Smithing :yellow_square:
    * Smelting ore to bars :heavy_check_mark:
    * Forging :yellow_square:
        * Correct items :heavy_check_mark:
        * Hiding non-applicable items :yellow_square:


================================================
FILE: LICENSE
================================================
                    GNU GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU General Public License is a free, copyleft license for
software and other kinds of works.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too, receive
or can get the source code.  And you must show them these terms so they
know their rights.

  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

  For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

  Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

  Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

    <program>  Copyright (C) <year>  <name of author>
    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.

  The GNU General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.  But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.


================================================
FILE: README.md
================================================
[![RuneJS Discord Server](https://img.shields.io/discord/678751302297059336?label=RuneJS%20Discord&logo=discord)](https://discord.gg/5P74nSh)

[![RuneJS](https://i.imgur.com/QSXNzwC.png)](https://github.com/runejs/)

# RuneJS Game Server

RuneJS is a RuneScape game server written in TypeScript and JavaScript. The aim of this project is to create a game server that is both fun and easy to use, while also providing simple content development systems.

The game server currently runs a build of RuneScape from October 30th-31st, 2006 (game build #435). No other builds are supported at this time, but may become available in the future.

**RuneJS is completely open-source and open to all pull requests and/or issues. Many plugins have been added by contributor pull requests and we're always happy to have more!**

![RuneJS Lumbridge](https://i.imgur.com/KVCqKSb.png)

## Setup

### Prerequisites

- [`docker`](https://docs.docker.com/get-docker/) and [`docker-compose`](https://docs.docker.com/compose/install/)
  - If on Windows, `docker-compose` comes with `docker`

### Running the Game Server

1. Copy the `config/server-config.example.json` and paste it into the same folder using the name `server-config.json`
2. Go into your new `server-config.json` file and modify your RSA modulus and exponent with the ones matching your game client
    - You may also modify the server's port and host address from this configuration file
3. Build the docker image with `docker-compose build`
4. Run the game server with `docker-compose up`

The game server will spin up and be accessible via port 43594.

## Game Client

The [RuneScape Java Client #435](https://github.com/runejs/refactored-client-435) must be used to log into a RuneJS game server.

## Additional Commands

Before running these commands, you must:

1. have [NodeJS **version 24 or higher**](https://nodejs.org/en/) installed on your machine
2. run `npm install` from the root of this project

* `npm run game` Launches the game server by itself without building
* `npm run game:dev` Builds and launches the game server by itself in watch mode
* `npm run login` Launches the login server by itself without building
* `npm run update` Launches the update server by itself without building
* `npm run infra` Launches both the login and update server without building
* `npm run standalone` Launches all three servers concurrently without building
* `npm run build:watch` Builds the application and watches for changes
* `npm run build` Builds the application
* `npm run lint` Runs Biome in linting mode, use `lint:fix` to autofix
* `npm run format` Runs Biome in formatting mode, use `format:fix` to autofix
* `npm run test` Runs all tests with Jest
* `npm run typecheck` Typechecks the project
* `npm run fin` Combines lint:fix, format:fix, test and typecheck into a single command


================================================
FILE: biome.json
================================================
{
    "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
    "vcs": {
        "enabled": true,
        "clientKind": "git",
        "useIgnoreFile": true
    },
    "files": {
        "ignoreUnknown": false,
        "ignore": []
    },
    "formatter": {
        "enabled": true,
        "indentStyle": "space",
        "indentWidth": 4,
        "lineWidth": 140
    },
    "organizeImports": {
        "enabled": true
    },
    "linter": {
        "enabled": true,
        "rules": {
            "recommended": true,
            "complexity": {
                "recommended": true,
                "noBannedTypes": "off",
                "noForEach": "off",
                "noStaticOnlyClass": "off",
                "noUselessConstructor": "off",
                "noUselessSwitchCase": "off",
                "useLiteralKeys": "off",
                "useOptionalChain": "off"
            },
            "correctness": {
                "recommended": true,
                "noSwitchDeclarations": "off"
            },
            "performance": {
                "recommended": true,
                "noAccumulatingSpread": "off",
                "noDelete": "off"
            },
            "suspicious": {
                "recommended": true,
                "noAssignInExpressions": "off",
                "noConfusingVoidType": "off",
                "noDoubleEquals": "off",
                "noDuplicateObjectKeys": "off",
                "noExplicitAny": "off",
                "noGlobalIsNan": "off",
                "noImplicitAnyLet": "off",
                "noSelfCompare": "off",
                "noUnsafeDeclarationMerging": "off"
            },
            "style": {
                "recommended": true,
                "noInferrableTypes": "off",
                "noNonNullAssertion": "off",
                "noParameterAssign": "off",
                "noUnusedTemplateLiteral": "off",
                "noUselessElse": "off",
                "useEnumInitializers": "off",
                "useImportType": "off",
                "useNodejsImportProtocol": "off",
                "useNumberNamespace": "off",
                "useSingleVarDeclarator": "off",
                "useTemplate": "off"
            }
        }
    },
    "javascript": {
        "formatter": {
            "quoteStyle": "single",
            "arrowParentheses": "asNeeded"
        }
    }
}


================================================
FILE: cache/file-names.properties
================================================
-1863637185=miscgraphics,4
-1863637184=miscgraphics,5
-1863637187=miscgraphics,2
-1863637186=miscgraphics,3
-1863637181=miscgraphics,8
-1863637180=miscgraphics,9
-440204630=alls fairy in love n war
-1863637183=miscgraphics,6
-1253085654=scorpia_dances
-1863637182=miscgraphics,7
1356196826=backvmid3
-751102526=high seas
1356196825=backvmid2
-1863637189=miscgraphics,0
549358875=camelot
-1863637188=miscgraphics,1
-1619800378=emotes_locked,19
-1619800379=emotes_locked,18
792536868=understanding
1356196824=backvmid1
-1773559904=title_mute
-342013218=p11_full
1523653533=pirates of peril
696768774=harmony
-1701556831=magicoff2,27
281586976=orb_icon,3
286265996=ready for battle
-1701556832=magicoff2,26
281586977=orb_icon,4
-645977478=scape scared
-1701556833=magicoff2,25
281586978=orb_icon,5
-1701556834=magicoff2,24
-1701556830=magicoff2,28
-1052794696=dance of death
-1619800383=emotes_locked,14
-1619800384=emotes_locked,13
-1619800385=emotes_locked,12
-1556842207=sl_flags
-1619800386=emotes_locked,11
1614826739=mapletree
-1619800387=emotes_locked,10
-1701556835=magicoff2,23
-1701556836=magicoff2,22
1363656441=serenade
-1701556837=magicoff2,21
3089326=door
-1701556838=magicoff2,20
-1619800380=emotes_locked,17
-1619800381=emotes_locked,16
-1619800382=emotes_locked,15
-1037172987=tomorrow
825974316=melodrama
281586973=orb_icon,0
281586974=orb_icon,1
281586975=orb_icon,2
-1701556864=magicoff2,15
-1701556865=magicoff2,14
-1701556866=magicoff2,13
1509400204=sarcophagus
-1701556867=magicoff2,12
-1701556860=magicoff2,19
-1701556861=magicoff2,18
-1701556862=magicoff2,17
1868377358=lower_depths
-1701556863=magicoff2,16
1086036315=reggae2
-1220755677=hermit
-1544597765=sl_stars
-1619800350=emotes_locked,26
-1619800351=emotes_locked,25
-1636062434=tex_brown
-1619800352=emotes_locked,24
-1619800353=emotes_locked,23
-2122174648=back to life
-1619800354=emotes_locked,22
-1701556868=magicoff2,11
-1619800355=emotes_locked,21
-1701556869=magicoff2,10
-1619800356=emotes_locked,20
1619539773=side_icons,7
1121239524=scape wild
368271413=diango's little helpers
1619539772=side_icons,6
1619539775=side_icons,9
1619539774=side_icons,8
-1938172321=miscgraphics2,0
1619539771=side_icons,5
1619539770=side_icons,4
-926977577=the enchanter
1202794514=doorways
1343649581=schools out
-1097177625=q8_full
756012174=wornicons,4
756012173=wornicons,3
756012176=wornicons,6
756012175=wornicons,5
756012170=wornicons,0
827249681=ogre the top
756012172=wornicons,2
756012171=wornicons,1
-1741764817=poles apart
756012178=wornicons,8
-1938172320=miscgraphics2,1
756012177=wornicons,7
-43136286=the last shanty
756012179=wornicons,9
837131331=mapback
-1938172313=miscgraphics2,8
907740319=the depths
-1938172312=miscgraphics2,9
-2099722614=cave of beasts
-1938172317=miscgraphics2,4
-1938172316=miscgraphics2,5
-1938172315=miscgraphics2,6
-1938172314=miscgraphics2,7
1619539769=side_icons,3
-1367483767=cavern
-1938172319=miscgraphics2,2
50474489=treestump
-1938172318=miscgraphics2,3
1619539766=side_icons,0
1619539768=side_icons,2
1619539767=side_icons,1
-607416954=prayeron,11
1837251043=melzars maze
-607416953=prayeron,12
1318893900=have an ice day
-607416952=prayeron,13
-1701556800=magicoff2,37
-607416951=prayeron,14
-1701556801=magicoff2,36
-56804840=woodland
-607416950=prayeron,15
1120636327=scape cave
358884868=button_red
-1701556806=magicoff2,31
-1701556807=magicoff2,30
-1701556802=magicoff2,35
-1701556803=magicoff2,34
-1701556804=magicoff2,33
-1858265682=monster melee
-1701556805=magicoff2,32
-649484675=land of the dwarves
-1789903512=golden touch
1328851780=close_buttons,6
1080306793=shayzien_march
-1339126929=damage
4820960=monkey sadness
-1951786153=bone dance
1328851781=close_buttons,7
939546513=forlorn_homestead
-1019905269=shadowland
-607416955=prayeron,10
-2048535896=pheasant peasant
-1025233830=monkey madness
1121125956=scape soft
-1562452687=etcetera
1969878996=emotes,47
1969878994=emotes,45
-1228279872=ge_icons,3
1969878995=emotes,46
-1228279871=ge_icons,4
1969878992=emotes,43
-1228279870=ge_icons,5
1969878993=emotes,44
1959803992=invback
399048409=mage arena
1969878990=emotes,41
-47057524=lasting
1969878991=emotes,42
-1228279875=ge_icons,0
-1228279874=ge_icons,1
-1228279873=ge_icons,2
-1860080918=inspiration
1997757502=redstone2
1997757503=redstone3
-1060046352=tribal2
1997757501=redstone1
-1701556829=magicoff2,29
1890607210=magicon2,37
1890607211=magicon2,38
1890607212=magicon2,39
-1408684838=ascent
-848436598=fishing
-119984250=combaticons2,17
-119984251=combaticons2,16
1769177816=jungle island
-119984252=combaticons2,15
-119984253=combaticons2,14
-119984254=combaticons2,13
-119984255=combaticons2,12
-119984256=combaticons2,11
-119984257=combaticons2,10
1890607205=magicon2,32
1890607206=magicon2,33
1890607207=magicon2,34
1890607208=magicon2,35
135141185=zeah_combat
1890607209=magicon2,36
-180851958=norse code
112903447=water
922007495=talking forest
-672706748=miracle dance
-1110089645=lament
-1237461365=grotto
1890607203=magicon2,30
1890607204=magicon2,31
-1073910849=mirror
-988841056=still night
-1857025509=sunburn
-468596910=easter jig
796868952=major miner
-1066798491=trawler
1640556978=wonderous
-1624274920=emperor
740093634=find my way
1890607238=magicon2,44
1890607239=magicon2,45
3559837=tick
-1839713245=sideicons
1029455878=hells bells
1890607234=magicon2,40
1890607235=magicon2,41
1890607236=magicon2,42
1890607237=magicon2,43
1503566841=forbidden
-895763669=spooky
-276138668=ham attack
500433071=combaticons,5
-1021014225=catch me if you can
500433070=combaticons,4
500433073=combaticons,7
500433072=combaticons,6
500433075=combaticons,9
1533565119=mind over matter
500433074=combaticons,8
2025958358=emotes_locked,4
500433066=combaticons,0
2025958357=emotes_locked,3
862821975=far away
-1228392498=artistry
2025958356=emotes_locked,2
500433068=combaticons,2
2025958355=emotes_locked,1
500433067=combaticons,1
1085444827=refresh
500433069=combaticons,3
2025958359=emotes_locked,5
1427043851=on the up
2025958354=emotes_locked,0
1316697938=whistle
347955347=venture
1959211608=mapfunction,77
1959211609=mapfunction,78
881850881=the chosen
1959211601=mapfunction,70
1959211602=mapfunction,71
584643951=lost soul
582140282=rising damp
1959211603=mapfunction,72
1740872686=soulfall
1959211604=mapfunction,73
1959211605=mapfunction,74
-119984248=combaticons2,19
1959211606=mapfunction,75
-119984249=combaticons2,18
1609255038=slither and thither
82917947=sarim's vermin
1959211607=mapfunction,76
1728911401=natural
-1189743137=duel arena
108698078=roof2
214634021=head to head
2025958361=emotes_locked,7
-448773288=isle of everywhere
2025958360=emotes_locked,6
-1869996941=titlebox
-338347745=showdown
-2075972251=long ago
2025958363=emotes_locked,9
2025958362=emotes_locked,8
-1487589606=7th realm
-1253087691=garden
-2133902017=zeah_farming
-492926285=impetuous
3314014=lair
907815588=the desert
-1960860275=barbarianism
1890607241=magicon2,47
1890607242=magicon2,48
1890607243=magicon2,49
-919642451=jungle bells
795515487=underground
561438836=fountain
-1418827919=illusive
-634763748=fruits de mer
1890607240=magicon2,46
1694458038=large_button
1393517697=bandit camp
1959211632=mapfunction,80
1884773718=magicoff2,2
1884773719=magicoff2,3
1884773716=magicoff2,0
2121900771=backtop1
1884773717=magicoff2,1
-103077377=gnomeball
-1947119982=blistering barnacles
828650857=autumn voyage
92909147=alone
1691516951=undead dungeon
122265833=expecting
-1320617626=dunjun
1959211633=mapfunction,81
1959211634=mapfunction,82
1959211635=mapfunction,83
1959211636=mapfunction,84
1959211637=mapfunction,85
777534707=army of darkness
1959211638=mapfunction,86
1959211639=mapfunction,87
1884773721=magicoff2,5
1884773722=magicoff2,6
1884773720=magicoff2,4
1959211640=mapfunction,88
1959211641=mapfunction,89
-327707013=anywhere
1884773725=magicoff2,9
1884773723=magicoff2,7
1884773724=magicoff2,8
1116844876=incantation
-728886272=temple of light
685934899=in the clink
-1237289460=grumpy
1945133711=inferno
466902883=strange place
-418223472=phasmatys
817472004=zombiism
106578554=zeah_book,0
106578555=zeah_book,1
1509070203=eagle peak
-485932799=expedition
1171923143=emotes,8
-675357975=attack1
1171923144=emotes,9
1959211610=mapfunction,79
-675357974=attack2
-675357973=attack3
-675357972=attack4
-675357971=attack5
40246002=masquerade
-675357970=attack6
-734206983=arrival
-1980407601=sea shanty xmas
284435223=pharoah's tomb
-148552909=down below
1171923141=emotes,6
1171923142=emotes,7
1171923140=emotes,5
-1077789440=mellow
-710537653=kingdom
1171923138=emotes,3
1171923139=emotes,4
1171923136=emotes,1
-2098286081=venture2
1171923137=emotes,2
1171923135=emotes,0
-1094248165=sigmunds showdown
-271106892=rat a tat tat
3288564=keys
-143163121=ham fisted
-900633031=medieval
944208821=life's a beach\!
-1228279453=riverside
-1666444059=combaticons,10
825919125=options_icons,24
825919126=options_icons,25
1179379180=the trade parade
-1666444057=combaticons,12
825919123=options_icons,22
-1666444058=combaticons,11
825919124=options_icons,23
825919121=options_icons,20
1884768169=magicoff,32
825919122=options_icons,21
1884768167=magicoff,30
1884768168=magicoff,31
1318818808=chainmail
582031337=intrepid
783525419=beetle juice
432605856=untouchable
-969918857=neverland
79789174=narnode's theme
-705938181=zealot
117588=web
-1666444051=combaticons,18
-1666444052=combaticons,17
1687654733=troubled
-1666444050=combaticons,19
-1666444055=combaticons,14
825919129=options_icons,28
-1666444056=combaticons,13
-1666444053=combaticons,16
825919127=options_icons,26
-1666444054=combaticons,15
825919128=options_icons,27
1320694328=magical journey
364185053=roll the bones
-1254483584=jungly1
981183822=right on track
-1254483583=jungly2
-1254483582=jungly3
3075958=dark
-2038936746=deep down
1512143976=everlasting fire
-1392319985=beyond
46273615=tale of keldagrim
-651951461=goblin game
3522941=save
104084791=mossy
1250935993=the monsters below
794539501=garden of summer
1814277765=elven mist
2110556093=the golem
-1475251658=where eagles lair
1884768143=magicoff,27
1884768144=magicoff,28
1884768141=magicoff,25
1529837717=bubble and squeak
1884768142=magicoff,26
-1679325940=technology
1884768145=magicoff,29
-826562194=troubled_waters
1884768140=magicoff,24
-1359348243=painting1
1267356434=the power of tears
-1359348242=painting2
-860755690=jungle hunt
1884768138=magicoff,22
-1197347961=magic magic magic
1884768139=magicoff,23
1134405764=hypnotized
1959211539=mapfunction,50
1381363755=my arms journey
-1644401602=complication
1959211540=mapfunction,51
1959211541=mapfunction,52
1884768136=magicoff,20
1959211542=mapfunction,53
2111304827=warning_icons,0
1884768137=magicoff,21
-440187560=zogre dance
1959211543=mapfunction,54
2111304828=warning_icons,1
-2002535437=corridors of power
825919130=options_icons,29
580384095=jungle troubles
1301622585=slice of station
1959211544=mapfunction,55
2111304829=warning_icons,2
-1294172031=escape
-1309477156=expanse
-1526067851=alternative root
2124773424=dynasty
1743765602=leftarrow
-1482676188=romancing the crone
-1891851953=island of the trolls
736457293=small_button_pressed
-1106172890=letter
986170990=dreamstate
1959211545=mapfunction,56
1959211546=mapfunction,57
1765722413=spirits of elid
1959211547=mapfunction,58
1959211548=mapfunction,59
-2075333010=lonesome
3314400=lava
1355033875=worldmap_icon,1
1814357716=knightmare
1690742645=nox_irae
94935104=cross
-1249495153=frogland
-1642689926=athletes foot
107944162=quest
1355033874=worldmap_icon,0
-2130741313=joy of the hunt
-28982081=labyrinth
250959119=marooned
-1522984472=altar_ego
1326424637=the lost melody
-1779111734=arabique
-398925062=sea shanty2
1884768110=magicoff,15
1884768111=magicoff,16
1817249074=woe of the wyvern
1884768114=magicoff,19
1884768112=magicoff,17
-1624760229=emotion
1884768113=magicoff,18
-353951458=attention
279431252=garden of autumn
422652266=small_button
1884768107=magicoff,12
1884768108=magicoff,13
375695247=the far side
1884768105=magicoff,10
1884768106=magicoff,11
-528864109=crystal sword
1884768109=magicoff,14
1959211570=mapfunction,60
-158141423=prayeron,7
-158141424=prayeron,6
1959211571=mapfunction,61
-158141421=prayeron,9
1959211572=mapfunction,62
-158141422=prayeron,8
1959211573=mapfunction,63
1959211574=mapfunction,64
688840255=piscarilius_sigil
1959211575=mapfunction,65
1959211576=mapfunction,66
1170407052=headicons_prayer
1959211577=mapfunction,67
-324496873=soundscape
-1418445703=tex_red
1961540869=wornicons,10
-1028580907=that_sullen_hall
397136995=elfpainting
-2092714094=haunted mine
1959211578=mapfunction,68
1959211579=mapfunction,69
-158141429=prayeron,1
-158141427=prayeron,3
-140492390=bunny_sugar_rush
-158141428=prayeron,2
-158141425=prayeron,5
1827366203=righteousness
-649601274=darkness_in_the_depths
-158141426=prayeron,4
1961540870=wornicons,11
-158141430=prayeron,0
910299584=principality
-734028978=arrow,1
-734028979=arrow,0
790067275=garden of spring
35762567=workshop
-1095396929=competition
96463963=egypt
-1154441378=jollyr
-1685231711=cave background
-2078908549=time out
-1172405897=wildwood
-170561624=spookyjungle
2110231453=mod_icons
2061491048=shining
-1063411723=tremble
94627585=chest
-520702427=ice melody
1346720899=backleft1
-607416919=prayeron,25
-607416918=prayeron,26
900197712=staticons,6
-607416917=prayeron,27
900197713=staticons,7
-607416916=prayeron,28
900197710=staticons,4
-607416915=prayeron,29
900197711=staticons,5
957931606=courage
900197714=staticons,8
900197715=staticons,9
-720253066=the other side
-1655721374=prayeroff,31
-607416921=prayeron,23
-1655721375=prayeroff,30
-607416920=prayeron,24
-710515142=the mad mole
-1350228392=stratosphere
-1666438445=combaticons2,3
-1666438446=combaticons2,2
-1666438443=combaticons2,5
-1666438444=combaticons2,4
-1106570438=legion
-1666438441=combaticons2,7
-1666438442=combaticons2,6
1398587265=flute salad
-1666438440=combaticons2,8
837223705=mapedge
900197709=staticons,3
-243680393=peng_emotes,7
900197707=staticons,1
378300078=everlasting
900197708=staticons,2
-944748869=witching
-243680396=peng_emotes,4
-1335336992=logo_deadman_mode
-1368714737=small_button_blue
-795140435=wander
-243680397=peng_emotes,3
-243680394=peng_emotes,6
-1666438447=combaticons2,1
-243680395=peng_emotes,5
-1666438448=combaticons2,0
-243680398=peng_emotes,2
-243680399=peng_emotes,1
-607416924=prayeron,20
900197706=staticons,0
-607416923=prayeron,21
-607416922=prayeron,22
3016376=bark
-89244313=romper chomper
346288985=dorgeshun deep
1585002399=magicon,21
-1725263140=chef surprize
1585002398=magicon,20
-993528987=making waves
-628963539=ham and seek
-1666438439=combaticons2,9
-333224315=baroque
-1236252722=prime time
280241284=waking dream
-564582358=distant land
115411843=castlewars
1513246078=al kharid
-1377700863=unknown land
1264132816=miles away
1185785872=barbassault_icons,3
1185785873=barbassault_icons,4
-1655721397=prayeroff,29
-1655721398=prayeroff,28
1185785874=barbassault_icons,5
-1655721399=prayeroff,27
1185785875=barbassault_icons,6
1711341885=fight or flight
1185785870=barbassault_icons,1
1185785871=barbassault_icons,2
3530505=sire
-309570839=pick_and_shovel
647234089=distillery hilarity
-127408236=gnome_village_party
1337378554=backbase2
109757537=stars
1337378553=backbase1
109757538=start
819884325=wilderness3
1328851775=close_buttons,1
658759958=side_background
1328851774=close_buttons,0
-782211141=wonder
1328851777=close_buttons,3
-1995718284=wall_white
819884324=wilderness2
1328851776=close_buttons,2
1328851779=close_buttons,5
-943885542=scape hunter
1328851778=close_buttons,4
1185785869=barbassault_icons,0
-607416949=prayeron,16
-607416948=prayeron,17
-1779684630=rune essence
-607416947=prayeron,18
-607416946=prayeron,19
1119460311=bandos battalion
-967559823=creature cruelty
-1904094243=zeah_fishing
-1913214770=wilderness
460367020=village
825919161=options_icons,39
1585002375=magicon,18
94839810=coins
1585002376=magicon,19
825919160=options_icons,38
-1282090556=faerie
-521895311=the adventurer
788399136=tree spirits
-1902858744=beneath_the_stronghold
-356730043=pirates of penance
1185785876=barbassault_icons,7
825919158=options_icons,36
825919159=options_icons,37
825919156=options_icons,34
-1455241861=victory is mine
825919157=options_icons,35
-1333874720=side_icons,17
825919154=options_icons,32
825919155=options_icons,33
825919152=options_icons,30
825919153=options_icons,31
1437805631=chatback
-1623296531=ground scape
685190118=in the brine
1366257555=nightfall
110327241=theme
-1333874725=side_icons,12
-1333874726=side_icons,11
-1333874727=side_icons,10
-1333874721=side_icons,16
-1333874722=side_icons,15
-1124681475=darkly_altared
-8976533=throne of the demon
-1333874723=side_icons,14
-1333874724=side_icons,13
-1989106719=assault and battery
1958759012=greatness
1057075019=b12_full
1143353537=chain of command
-51091830=desert voyage
-1073927447=mirage
-91048728=number_button
3165239=gaol
-1380919269=breeze
445640248=rugged_terrain
106079=key
-655784411=overlay_multiway
-1025835715=backright2
-1025835716=backright1
1120933843=scape main
3225350=iban
-956253112=title fight
-123912401=la mort
1585002367=magicon,10
-2128736428=startgame
1585002368=magicon,11
-925031874=royale
1585002369=magicon,12
1585002370=magicon,13
1585002373=magicon,16
1585002374=magicon,17
-1307116191=superstition
1585002371=magicon,14
1585002372=magicon,15
-587569902=path of peril
3392903=null
-1601127242=inadequacy
2136330800=staticons2,0
2136330801=staticons2,1
344336468=grip of the talon
2136330804=staticons2,4
2136330805=staticons2,5
2136330802=staticons2,2
2136330803=staticons2,3
1960215130=barking mad
-43712789=scape original
621171714=cellar song
1585002461=magicon,41
1585002462=magicon,42
1585002460=magicon,40
111485446=upass
2136330808=staticons2,8
694847251=in the manor
2136330809=staticons2,9
2136330806=staticons2,6
2136330807=staticons2,7
-1385847955=rightarrow
1343200077=the slayer
1585002465=magicon,45
1585002466=magicon,46
1585002463=magicon,43
1585002464=magicon,44
1585002469=magicon,49
-95571520=volcanic vikings
1585002467=magicon,47
1585002468=magicon,48
-1032629963=shipwrecked
93330745=aztec
-881372797=tabs,1
1377351472=oriental
121641580=headicons_hint
-881372798=tabs,0
1585002438=magicon,39
-1661605940=elfwood
-607416893=prayeron,30
-822106577=jungle island xmas
-607416892=prayeron,31
332368736=mad eadgar
1585002432=magicon,33
-143368781=side_background_right
1585002433=magicon,34
-1081494434=malady
1585002430=magicon,31
1585002431=magicon,32
1585002436=magicon,37
1585002437=magicon,38
1585002434=magicon,35
1585002435=magicon,36
-1938171360=miscgraphics3,0
-1059680853=trinity
781557721=dies_irae
-1938171359=miscgraphics3,1
497375231=stillness
-1938171358=miscgraphics3,2
-1938171357=miscgraphics3,3
-960709976=dogs of war
2129339089=magicon,1
2129339088=magicon,0
755433248=headicons_pk
108392383=regal
-213632750=waterfall
-1367706280=canvas
73828649=settlement
848123561=into the abyss
478781900=last stand
1339486127=the shadow
-1055503808=roc and roll
837204902=mapdots
950484242=compass
-1082154559=fanfare
747848680=nether_realm
788224888=dead quiet
1532279978=monarch waltz
-149029727=side_background_left1
812947089=fanfare2
-149029726=side_background_left2
1006643748=high spirits
-2136059388=starlight
2122572442=the tower
-1998869913=spooky2
1411067174=gnome village2
-2065077267=wild side
812947090=fanfare3
1585002429=magicon,30
1294629755=on the wing
2097127567=monkey badness
-2032107216=sojourn
1020264019=pest control
3237038=info
1473393027=fe fi fo fum
-1686202291=upper_depths
3540994=stop
1742080803=darkwood
740392969=little cave of horrors
-158379532=prayerglow
-691855347=in between
-200702983=the noble rodent
1652745754=forgotten
-1895307673=hitmark,3
-1895307674=hitmark,2
-1895307675=hitmark,1
-1895307676=hitmark,0
-1895307670=hitmark,6
-1895307671=hitmark,5
-1895307672=hitmark,4
1968917071=bone dry
-850506182=trawler minor
197029040=mapscene
-808772318=in the pits
-1165315580=looking back
-1763090403=scape_ape
-1938177931=miscgraphics,11
-1938177932=miscgraphics,10
1936130561=thrall_of_the_serpent
1258863383=yesteryear
1994744000=slice of silent movie
-1691854169=dead can dance
1585002407=magicon,29
1585002405=magicon,27
1585002406=magicon,28
271319484=frostbite
-499867199=meridian
1585002400=magicon,22
-1938177930=miscgraphics,12
-84626226=mudskipper melody
1585002403=magicon,25
1585002404=magicon,26
3641802=wall
1585002401=magicon,23
1585002402=magicon,24
-606457701=wolf mountain
1276599785=button_brown
1969878899=emotes,13
1969878897=emotes,11
1969878898=emotes,12
1969878896=emotes,10
-1938177928=miscgraphics,14
-907669678=brew hoo hoo
-1938177929=miscgraphics,13
72999866=subterranea
619237947=the galleon
-1764950404=scape sad
295831445=heart and mind
908430134=dangerous road
738888631=tradebacking
-174800339=verdana_11pt_regular
686705631=lightwalk
-601591436=side_background_bottom
-1479412376=the navigator
-359173459=zamorak zoo
744536246=null and void
-1701556798=magicoff2,39
-1701556799=magicoff2,38
-1396384012=bamboo
-200388662=lighthouse
133626717=suspicious
-810515425=voyage
3061973=crag
1802291895=big chords
-1661619479=elfwall
113315621=wood2
1813041183=steelborder2,0
429244831=slug a bug ball
1813041184=steelborder2,1
-1658386264=shining_spirit
738909086=chamber
526264239=verdana_13pt_regular
-877351859=temple
2142215577=the mollusc menace
1124498189=warpath
-2136649922=no way out
-339706871=grimly_fiendish
547534551=wrath and ruin
544229147=lore and order
3327206=load
1610073470=lovakengj_sigil
-419218284=long way home
-662489856=food for thought
1306461568=stagnant
-1662171955=elfdoor
-1043985601=meddling kids
947464074=titlebutton
-1309055712=exposed
-1487348923=ambient jungle
-1829469821=lament of meiyerditch
233203434=leftarrow_small
-1216167350=dangerous
114464611=railings
-1106574323=legend
-1701556767=magicoff2,49
-999707515=time to mine
-1701556768=magicoff2,48
2129339097=magicon,9
2129339096=magicon,8
1959211510=mapfunction,42
2129339095=magicon,7
1959211511=mapfunction,43
2129339094=magicon,6
2129339093=magicon,5
2129339092=magicon,4
2129339091=magicon,3
2129339090=magicon,2
3522472=saga
-1701556769=magicoff2,47
-544722449=rellekka
1033441676=tribal background
1915718129=the desolate isle
1890607150=magicon2,19
1787618597=stranded
1717999087=forgettable melody
1959211512=mapfunction,44
-243680400=peng_emotes,0
1959211513=mapfunction,45
1959211514=mapfunction,46
1959211515=mapfunction,47
1959211516=mapfunction,48
1959211517=mapfunction,49
1705947058=the cellar dwellers
1216634785=landlubber
1884768198=magicoff,40
-1588113323=the rogues den
1884768199=magicoff,41
-905842564=serene
-607599698=prayeroff,2
-607599699=prayeroff,1
1890607142=magicon2,11
1389384362=monkey trouble
1890607143=magicon2,12
1890607144=magicon2,13
1890607145=magicon2,14
1890607146=magicon2,15
1890607147=magicon2,16
1890607148=magicon2,17
1966766798=mausoleum
1890607149=magicon2,18
1808345541=armadyl alliance
290391725=options_slider,7
1890607141=magicon2,10
290391722=options_slider,4
-607599696=prayeroff,4
290391721=options_slider,3
-607599697=prayeroff,3
290391724=options_slider,6
-607599694=prayeroff,6
290391723=options_slider,5
-607599695=prayeroff,5
-607599692=prayeroff,8
-607599693=prayeroff,7
290391720=options_slider,2
-607599691=prayeroff,9
1334775925=chat_background
-1779127378=arabian2
-1779127377=arabian3
528722471=island life
1890607175=magicon2,23
1890607176=magicon2,24
949634504=mouse trap
1890607177=magicon2,25
1890607178=magicon2,26
1890607179=magicon2,27
3327403=logo
290391719=options_slider,1
1092249049=storm brew
290391718=options_slider,0
404357804=everywhere
1890607172=magicon2,20
1890607173=magicon2,21
951530772=contest
1890607174=magicon2,22
-1701556776=magicoff2,40
1884768176=magicoff,39
-395250469=corporal punishment
1749113330=newbie melody
1884768174=magicoff,37
1884768175=magicoff,38
-1701556772=magicoff2,44
-1701556773=magicoff2,43
-1701556774=magicoff2,42
-1701556775=magicoff2,41
-858121616=tzhaar
1884768172=magicoff,35
1884768173=magicoff,36
666772244=combat_shield
1884768170=magicoff,33
1884768171=magicoff,34
1959211509=mapfunction,41
1639695510=mapmarker
-1661748240=friends_icons
-552301350=knightly
-1918044851=mastermindless
-1701556770=magicoff2,46
-1701556771=magicoff2,45
201526300=corporealbeast
1959211508=mapfunction,40
105001967=nomad
-70910145=clickcross,3
-1737914947=mapfunction,5
1801745440=staticons2,11
-70910146=clickcross,2
-865479038=tribal
-1737914946=mapfunction,6
1801745441=staticons2,12
-70910147=clickcross,1
-1737914945=mapfunction,7
1801745442=staticons2,13
-70910148=clickcross,0
-1737914944=mapfunction,8
1801745443=staticons2,14
-1737914943=mapfunction,9
1801745444=staticons2,15
1801745445=staticons2,16
1801745446=staticons2,17
-1877545169=land down under
93921962=books
-1737914949=mapfunction,3
-1737914948=mapfunction,4
-1655721428=prayeroff,19
-2136884405=title.jpg
-1655721429=prayeroff,18
1584819628=magicoff,6
1584819629=magicoff,7
437480876=voodoo cult
1584819624=magicoff,2
1584819625=magicoff,3
1584819626=magicoff,4
-1737914952=mapfunction,0
1584819627=magicoff,5
-1737914951=mapfunction,1
124995564=harmony2
1584819622=magicoff,0
1801745439=staticons2,10
1584819623=magicoff,1
346263512=dorgeshun city
-1665011705=down and out
1890607180=magicon2,28
1890607181=magicon2,29
1417471781=titlescroll
1959211446=mapfunction,20
1956141536=options_radio_buttons,0
736568812=ballad of enchantment
-1737914950=mapfunction,2
1959211447=mapfunction,21
1959211448=mapfunction,22
1959211449=mapfunction,23
-1890130256=morytania
-70910141=clickcross,7
-70910142=clickcross,6
1956141539=options_radio_buttons,3
-70910143=clickcross,5
1956141538=options_radio_buttons,2
284766976=splendour
-70910144=clickcross,4
1956141537=options_radio_buttons,1
196677638=the quizmaster
530068296=overture
-1123094568=sl_button
-700552779=hosidius_sigil
-614076819=sad meadow
1956141543=options_radio_buttons,7
1956141542=options_radio_buttons,6
1956141541=options_radio_buttons,5
1956141540=options_radio_buttons,4
1584819631=magicoff,9
1846633612=gnome village
-2128560371=sl_back
1969878905=emotes,19
306819362=crystal castle
1584819630=magicoff,8
1969878903=emotes,17
303737220=options_icons,7
1969878904=emotes,18
1969878901=emotes,15
-78220817=devils_may_care
1969878902=emotes,16
-40521666=dimension x
1969878900=emotes,14
673424924=the lunar isle
789609582=brimstail's scales
303737222=options_icons,9
303737221=options_icons,8
1959211415=mapfunction,10
3059343=coil
1959211416=mapfunction,11
1959211417=mapfunction,12
-1256560486=last_man_standing
1959211418=mapfunction,13
336238005=rightarrow_small
1959211419=mapfunction,14
-677662361=forever
-1655721430=prayeroff,17
-1655721431=prayeroff,16
-1655721432=prayeroff,15
1959211420=mapfunction,15
1959211663=mapfunction,90
1959211421=mapfunction,16
1959211422=mapfunction,17
1959211423=mapfunction,18
303737217=options_icons,4
303737216=options_icons,3
303737215=options_icons,2
-1665005042=funny bunnies
303737214=options_icons,1
303737219=options_icons,6
303737218=options_icons,5
303737213=options_icons,0
95997798=we are the fairies
2001751835=desert heat
1959211424=mapfunction,19
-1655721437=prayeroff,10
687938017=clanwars
-1776024210=desolate_mage
-650944128=strength of saradomin
-1655721433=prayeroff,14
1160873524=aye car rum ba
-1655721434=prayeroff,13
-1655721435=prayeroff,12
-1081314499=marble
-1655721436=prayeroff,11
1097075475=reset,0
1959211477=mapfunction,30
-693313916=warriors guild
3506388=roof
1959211478=mapfunction,31
1097075476=reset,1
-2134967800=dagannoth dawn
-985763247=planks
1959211479=mapfunction,32
1999746381=fenkenstrain's refrain
898010371=garden of winter
359174830=rat hunt
1959211482=mapfunction,35
686441581=lightness
1959211483=mapfunction,36
1959211484=mapfunction,37
1959211485=mapfunction,38
1959211486=mapfunction,39
2023201035=dwarf theme
1959211480=mapfunction,33
1959211481=mapfunction,34
-1065532022=combatboxes,1
-1065532021=combatboxes,2
-1065532020=combatboxes,3
1867160429=old_tiles
394756979=scape santa
25205919=elfroof2
-663428071=dangerous way
-1065532023=combatboxes,0
1959211450=mapfunction,24
-895939599=spirit
1959211451=mapfunction,25
1959211452=mapfunction,26
1959211453=mapfunction,27
1959211454=mapfunction,28
1959211455=mapfunction,29
-275310687=undercurrent
212205923=goblin village
-303898981=faithless
-1381531001=tomb raider
260940912=marzipan
1343267530=backhmid1
1343267531=backhmid2
1097468315=horizon
-1655721404=prayeroff,22
623451622=kourend_the_magnificent
-1655721405=prayeroff,21
-1655721406=prayeroff,20
-1655721400=prayeroff,26
-313384067=p12_full
-1655721401=prayeroff,25
-1655721402=prayeroff,24
-1655721403=prayeroff,23
95848451=dream
1966781751=maws_jaws_claws
-995428255=parade
95734525=method of madness
-1308064877=hitmarks
1030045177=mutant medley
1333034828=blackmark
851641665=davy jones locker
417793574=scrollbar
1346720900=backleft2
1884768206=magicoff,48
1884768207=magicoff,49
1801140808=fangs for the memory
1884768204=magicoff,46
1345432055=pinball wizard
1884768205=magicoff,47
-783693496=dance of the undead
1274780903=chompy hunt
465278529=the lost tribe
-1666437481=combaticons3,6
2032696205=cabin fever
-1666437480=combaticons3,7
1825640471=borderland
415928477=zeah_mining
1884768202=magicoff,44
-607599700=prayeroff,0
1884768203=magicoff,45
1884768200=magicoff,42
1884768201=magicoff,43
-1666437487=combaticons3,0
-1666437486=combaticons3,1
813726263=crystal cave
1235442953=pathways
518814479=lullaby
-1666437483=combaticons3,4
1585007985=magicon2,7
-1666437482=combaticons3,5
1585007986=magicon2,8
-1666437485=combaticons3,2
1585007987=magicon2,9
-1666437484=combaticons3,3
104080482=moody
1969878967=emotes,39
-665666447=work work work
1364992651=evil bobs island
1969878965=emotes,37
1227328817=verdana_15pt_regular
1969878966=emotes,38
1969878963=emotes,35
1581724013=monkey business
1969878964=emotes,36
-74307138=miscellania
1969878961=emotes,33
1969878962=emotes,34
1969878960=emotes,32
1131171307=wayward
-1154558416=sl_arrows
529929957=overpass
1258058669=huffman
-694094064=adventure
1171698653=orb_xp,1
1171698652=orb_xp,0
1171698655=orb_xp,3
1171698654=orb_xp,2
1802171733=arceuus_sigil
221109227=tears of guthix
-1661754893=elfroof
-1666437478=combaticons3,9
1124565314=warrior
1969878958=emotes,30
1969878959=emotes,31
-934797897=reggae
2110260221=the genie
-1666437479=combaticons3,8
104257585=mummy
-1923924724=sworddecor,0
2136325196=staticons,17
-1332194002=background
2136164423=homescape
-1923924721=sworddecor,3
2136325194=staticons,15
-1923924722=sworddecor,2
-873564465=tiptoe
2136325195=staticons,16
-1923924723=sworddecor,1
123560953=espionage
2136325192=staticons,13
2136325193=staticons,14
1038911415=gnome king
2136325190=staticons,11
2136325191=staticons,12
1854274741=karamja jam
1969878989=emotes,40
-1242708793=glyphs
563269755=the terrible tower
1650323088=twilight
-12868552=sea shanty
289742397=book of spells
1880989696=dragontooth island
2136325189=staticons,10
110873=pen
-454421102=out of the deep
825919099=options_icons,19
825919097=options_icons,17
825919098=options_icons,18
-1349119470=cursed
1585007978=magicon2,0
825919095=options_icons,15
1585007979=magicon2,1
825919096=options_icons,16
825919093=options_icons,13
825919094=options_icons,14
825919091=options_icons,11
825919092=options_icons,12
-895977880=sphinx
-874529881=city of the dead
825919090=options_icons,10
1585007981=magicon2,3
1585007982=magicon2,4
1585007983=magicon2,5
-1618729246=body parts
1585007984=magicon2,6
1585007980=magicon2,2
1086075866=shayzien_sigil
2103661451=jester minute
-911346307=steelborder,2
-1809781334=button_brown_big
-911346306=steelborder,3
-816227352=vision
-911346309=steelborder,0
109407595=shine
-911346308=steelborder,1
-119954464=combaticons3,12
-119954465=combaticons3,11
-1846853118=armageddon
-119954462=combaticons3,14
-119954463=combaticons3,13
-119954460=combaticons3,16
-908183966=scarab
-119954461=combaticons3,15
-282886672=home sweet home
103666243=march
1969878929=emotes,22
1643875326=fire and brimstone
1969878927=emotes,20
-119954466=combaticons3,10
1969878928=emotes,21
-839455633=close quarters
941457503=way of the enchanter
-1453405761=mor-ul-rek
-415134015=have a blast
-1658514874=floating free
1213477442=chickened out
-1619800349=emotes_locked,27
-599680631=fear and loathing
-1081041422=insect queen
-1268786147=forest
-119954459=combaticons3,17
-119954457=combaticons3,19
-119954458=combaticons3,18
-850395529=trouble brewing
-1773920521=cave of the goblins
-771284962=claustrophobia
1310729739=bankbuttons,2
1306691868=upcoming
1465443077=over to nardah
1310729744=bankbuttons,7
1310729743=bankbuttons,6
1310729742=bankbuttons,5
1234827707=deep wildy
-90350772=xenophobe
-750127868=arabian
1310729741=bankbuttons,4
1310729740=bankbuttons,3
1041911129=waterlogged
108875897=runes
1447063382=barb wire
-378865792=magic dance
285466503=overlay_duel
1814287296=zeah_magic
1976894499=down to earth
1969878936=emotes,29
1969878934=emotes,27
-1567437308=deadlands
1969878935=emotes,28
1310729738=bankbuttons,1
1969878932=emotes,25
-957019274=too many cooks
1310729737=bankbuttons,0
2092627105=silence
1969878933=emotes,26
1969878930=emotes,23
1969878931=emotes,24
-901674570=well of voyage
1787935731=quill_oblique_large
-365283881=quill_caps_large
1157777820=lunar_alphabet
24702590=lunar_alphabet_lrg


================================================
FILE: cache/main_file_cache.dat2
================================================
[File too large to display: 28.8 MB]

================================================
FILE: config/file-names.properties
================================================
-1863637185=miscgraphics,4
-1863637184=miscgraphics,5
-1863637187=miscgraphics,2
-1863637186=miscgraphics,3
-1863637181=miscgraphics,8
-1863637180=miscgraphics,9
-440204630=alls fairy in love n war
-1863637183=miscgraphics,6
-1253085654=scorpia_dances
-1863637182=miscgraphics,7
1356196826=backvmid3
-751102526=high seas
1356196825=backvmid2
-1863637189=miscgraphics,0
549358875=camelot
-1863637188=miscgraphics,1
-1619800378=emotes_locked,19
-1619800379=emotes_locked,18
792536868=understanding
1356196824=backvmid1
-1773559904=title_mute
-342013218=p11_full
1523653533=pirates of peril
696768774=harmony
-1701556831=magicoff2,27
281586976=orb_icon,3
286265996=ready for battle
-1701556832=magicoff2,26
281586977=orb_icon,4
-645977478=scape scared
-1701556833=magicoff2,25
281586978=orb_icon,5
-1701556834=magicoff2,24
-1701556830=magicoff2,28
-1052794696=dance of death
-1619800383=emotes_locked,14
-1619800384=emotes_locked,13
-1619800385=emotes_locked,12
-1556842207=sl_flags
-1619800386=emotes_locked,11
1614826739=mapletree
-1619800387=emotes_locked,10
-1701556835=magicoff2,23
-1701556836=magicoff2,22
1363656441=serenade
-1701556837=magicoff2,21
3089326=door
-1701556838=magicoff2,20
-1619800380=emotes_locked,17
-1619800381=emotes_locked,16
-1619800382=emotes_locked,15
-1037172987=tomorrow
825974316=melodrama
281586973=orb_icon,0
281586974=orb_icon,1
281586975=orb_icon,2
-1701556864=magicoff2,15
-1701556865=magicoff2,14
-1701556866=magicoff2,13
1509400204=sarcophagus
-1701556867=magicoff2,12
-1701556860=magicoff2,19
-1701556861=magicoff2,18
-1701556862=magicoff2,17
1868377358=lower_depths
-1701556863=magicoff2,16
1086036315=reggae2
-1220755677=hermit
-1544597765=sl_stars
-1619800350=emotes_locked,26
-1619800351=emotes_locked,25
-1636062434=tex_brown
-1619800352=emotes_locked,24
-1619800353=emotes_locked,23
-2122174648=back to life
-1619800354=emotes_locked,22
-1701556868=magicoff2,11
-1619800355=emotes_locked,21
-1701556869=magicoff2,10
-1619800356=emotes_locked,20
1619539773=side_icons,7
1121239524=scape wild
368271413=diango's little helpers
1619539772=side_icons,6
1619539775=side_icons,9
1619539774=side_icons,8
-1938172321=miscgraphics2,0
1619539771=side_icons,5
1619539770=side_icons,4
-926977577=the enchanter
1202794514=doorways
1343649581=schools out
-1097177625=q8_full
756012174=wornicons,4
756012173=wornicons,3
756012176=wornicons,6
756012175=wornicons,5
756012170=wornicons,0
827249681=ogre the top
756012172=wornicons,2
756012171=wornicons,1
-1741764817=poles apart
756012178=wornicons,8
-1938172320=miscgraphics2,1
756012177=wornicons,7
-43136286=the last shanty
756012179=wornicons,9
837131331=mapback
-1938172313=miscgraphics2,8
907740319=the depths
-1938172312=miscgraphics2,9
-2099722614=cave of beasts
-1938172317=miscgraphics2,4
-1938172316=miscgraphics2,5
-1938172315=miscgraphics2,6
-1938172314=miscgraphics2,7
1619539769=side_icons,3
-1367483767=cavern
-1938172319=miscgraphics2,2
50474489=treestump
-1938172318=miscgraphics2,3
1619539766=side_icons,0
1619539768=side_icons,2
1619539767=side_icons,1
-607416954=prayeron,11
1837251043=melzars maze
-607416953=prayeron,12
1318893900=have an ice day
-607416952=prayeron,13
-1701556800=magicoff2,37
-607416951=prayeron,14
-1701556801=magicoff2,36
-56804840=woodland
-607416950=prayeron,15
1120636327=scape cave
358884868=button_red
-1701556806=magicoff2,31
-1701556807=magicoff2,30
-1701556802=magicoff2,35
-1701556803=magicoff2,34
-1701556804=magicoff2,33
-1858265682=monster melee
-1701556805=magicoff2,32
-649484675=land of the dwarves
-1789903512=golden touch
1328851780=close_buttons,6
1080306793=shayzien_march
-1339126929=damage
4820960=monkey sadness
-1951786153=bone dance
1328851781=close_buttons,7
939546513=forlorn_homestead
-1019905269=shadowland
-607416955=prayeron,10
-2048535896=pheasant peasant
-1025233830=monkey madness
1121125956=scape soft
-1562452687=etcetera
1969878996=emotes,47
1969878994=emotes,45
-1228279872=ge_icons,3
1969878995=emotes,46
-1228279871=ge_icons,4
1969878992=emotes,43
-1228279870=ge_icons,5
1969878993=emotes,44
1959803992=invback
399048409=mage arena
1969878990=emotes,41
-47057524=lasting
1969878991=emotes,42
-1228279875=ge_icons,0
-1228279874=ge_icons,1
-1228279873=ge_icons,2
-1860080918=inspiration
1997757502=redstone2
1997757503=redstone3
-1060046352=tribal2
1997757501=redstone1
-1701556829=magicoff2,29
1890607210=magicon2,37
1890607211=magicon2,38
1890607212=magicon2,39
-1408684838=ascent
-848436598=fishing
-119984250=combaticons2,17
-119984251=combaticons2,16
1769177816=jungle island
-119984252=combaticons2,15
-119984253=combaticons2,14
-119984254=combaticons2,13
-119984255=combaticons2,12
-119984256=combaticons2,11
-119984257=combaticons2,10
1890607205=magicon2,32
1890607206=magicon2,33
1890607207=magicon2,34
1890607208=magicon2,35
135141185=zeah_combat
1890607209=magicon2,36
-180851958=norse code
112903447=water
922007495=talking forest
-672706748=miracle dance
-1110089645=lament
-1237461365=grotto
1890607203=magicon2,30
1890607204=magicon2,31
-1073910849=mirror
-988841056=still night
-1857025509=sunburn
-468596910=easter jig
796868952=major miner
-1066798491=trawler
1640556978=wonderous
-1624274920=emperor
740093634=find my way
1890607238=magicon2,44
1890607239=magicon2,45
3559837=tick
-1839713245=sideicons
1029455878=hells bells
1890607234=magicon2,40
1890607235=magicon2,41
1890607236=magicon2,42
1890607237=magicon2,43
1503566841=forbidden
-895763669=spooky
-276138668=ham attack
500433071=combaticons,5
-1021014225=catch me if you can
500433070=combaticons,4
500433073=combaticons,7
500433072=combaticons,6
500433075=combaticons,9
1533565119=mind over matter
500433074=combaticons,8
2025958358=emotes_locked,4
500433066=combaticons,0
2025958357=emotes_locked,3
862821975=far away
-1228392498=artistry
2025958356=emotes_locked,2
500433068=combaticons,2
2025958355=emotes_locked,1
500433067=combaticons,1
1085444827=refresh
500433069=combaticons,3
2025958359=emotes_locked,5
1427043851=on the up
2025958354=emotes_locked,0
1316697938=whistle
347955347=venture
1959211608=mapfunction,77
1959211609=mapfunction,78
881850881=the chosen
1959211601=mapfunction,70
1959211602=mapfunction,71
584643951=lost soul
582140282=rising damp
1959211603=mapfunction,72
1740872686=soulfall
1959211604=mapfunction,73
1959211605=mapfunction,74
-119984248=combaticons2,19
1959211606=mapfunction,75
-119984249=combaticons2,18
1609255038=slither and thither
82917947=sarim's vermin
1959211607=mapfunction,76
1728911401=natural
-1189743137=duel arena
108698078=roof2
214634021=head to head
2025958361=emotes_locked,7
-448773288=isle of everywhere
2025958360=emotes_locked,6
-1869996941=titlebox
-338347745=showdown
-2075972251=long ago
2025958363=emotes_locked,9
2025958362=emotes_locked,8
-1487589606=7th realm
-1253087691=garden
-2133902017=zeah_farming
-492926285=impetuous
3314014=lair
907815588=the desert
-1960860275=barbarianism
1890607241=magicon2,47
1890607242=magicon2,48
1890607243=magicon2,49
-919642451=jungle bells
795515487=underground
561438836=fountain
-1418827919=illusive
-634763748=fruits de mer
1890607240=magicon2,46
1694458038=large_button
1393517697=bandit camp
1959211632=mapfunction,80
1884773718=magicoff2,2
1884773719=magicoff2,3
1884773716=magicoff2,0
2121900771=backtop1
1884773717=magicoff2,1
-103077377=gnomeball
-1947119982=blistering barnacles
828650857=autumn voyage
92909147=alone
1691516951=undead dungeon
122265833=expecting
-1320617626=dunjun
1959211633=mapfunction,81
1959211634=mapfunction,82
1959211635=mapfunction,83
1959211636=mapfunction,84
1959211637=mapfunction,85
777534707=army of darkness
1959211638=mapfunction,86
1959211639=mapfunction,87
1884773721=magicoff2,5
1884773722=magicoff2,6
1884773720=magicoff2,4
1959211640=mapfunction,88
1959211641=mapfunction,89
-327707013=anywhere
1884773725=magicoff2,9
1884773723=magicoff2,7
1884773724=magicoff2,8
1116844876=incantation
-728886272=temple of light
685934899=in the clink
-1237289460=grumpy
1945133711=inferno
466902883=strange place
-418223472=phasmatys
817472004=zombiism
106578554=zeah_book,0
106578555=zeah_book,1
1509070203=eagle peak
-485932799=expedition
1171923143=emotes,8
-675357975=attack1
1171923144=emotes,9
1959211610=mapfunction,79
-675357974=attack2
-675357973=attack3
-675357972=attack4
-675357971=attack5
40246002=masquerade
-675357970=attack6
-734206983=arrival
-1980407601=sea shanty xmas
284435223=pharoah's tomb
-148552909=down below
1171923141=emotes,6
1171923142=emotes,7
1171923140=emotes,5
-1077789440=mellow
-710537653=kingdom
1171923138=emotes,3
1171923139=emotes,4
1171923136=emotes,1
-2098286081=venture2
1171923137=emotes,2
1171923135=emotes,0
-1094248165=sigmunds showdown
-271106892=rat a tat tat
3288564=keys
-143163121=ham fisted
-900633031=medieval
944208821=life's a beach\!
-1228279453=riverside
-1666444059=combaticons,10
825919125=options_icons,24
825919126=options_icons,25
1179379180=the trade parade
-1666444057=combaticons,12
825919123=options_icons,22
-1666444058=combaticons,11
825919124=options_icons,23
825919121=options_icons,20
1884768169=magicoff,32
825919122=options_icons,21
1884768167=magicoff,30
1884768168=magicoff,31
1318818808=chainmail
582031337=intrepid
783525419=beetle juice
432605856=untouchable
-969918857=neverland
79789174=narnode's theme
-705938181=zealot
117588=web
-1666444051=combaticons,18
-1666444052=combaticons,17
1687654733=troubled
-1666444050=combaticons,19
-1666444055=combaticons,14
825919129=options_icons,28
-1666444056=combaticons,13
-1666444053=combaticons,16
825919127=options_icons,26
-1666444054=combaticons,15
825919128=options_icons,27
1320694328=magical journey
364185053=roll the bones
-1254483584=jungly1
981183822=right on track
-1254483583=jungly2
-1254483582=jungly3
3075958=dark
-2038936746=deep down
1512143976=everlasting fire
-1392319985=beyond
46273615=tale of keldagrim
-651951461=goblin game
3522941=save
104084791=mossy
1250935993=the monsters below
794539501=garden of summer
1814277765=elven mist
2110556093=the golem
-1475251658=where eagles lair
1884768143=magicoff,27
1884768144=magicoff,28
1884768141=magicoff,25
1529837717=bubble and squeak
1884768142=magicoff,26
-1679325940=technology
1884768145=magicoff,29
-826562194=troubled_waters
1884768140=magicoff,24
-1359348243=painting1
1267356434=the power of tears
-1359348242=painting2
-860755690=jungle hunt
1884768138=magicoff,22
-1197347961=magic magic magic
1884768139=magicoff,23
1134405764=hypnotized
1959211539=mapfunction,50
1381363755=my arms journey
-1644401602=complication
1959211540=mapfunction,51
1959211541=mapfunction,52
1884768136=magicoff,20
1959211542=mapfunction,53
2111304827=warning_icons,0
1884768137=magicoff,21
-440187560=zogre dance
1959211543=mapfunction,54
2111304828=warning_icons,1
-2002535437=corridors of power
825919130=options_icons,29
580384095=jungle troubles
1301622585=slice of station
1959211544=mapfunction,55
2111304829=warning_icons,2
-1294172031=escape
-1309477156=expanse
-1526067851=alternative root
2124773424=dynasty
1743765602=leftarrow
-1482676188=romancing the crone
-1891851953=island of the trolls
736457293=small_button_pressed
-1106172890=letter
986170990=dreamstate
1959211545=mapfunction,56
1959211546=mapfunction,57
1765722413=spirits of elid
1959211547=mapfunction,58
1959211548=mapfunction,59
-2075333010=lonesome
3314400=lava
1355033875=worldmap_icon,1
1814357716=knightmare
1690742645=nox_irae
94935104=cross
-1249495153=frogland
-1642689926=athletes foot
107944162=quest
1355033874=worldmap_icon,0
-2130741313=joy of the hunt
-28982081=labyrinth
250959119=marooned
-1522984472=altar_ego
1326424637=the lost melody
-1779111734=arabique
-398925062=sea shanty2
1884768110=magicoff,15
1884768111=magicoff,16
1817249074=woe of the wyvern
1884768114=magicoff,19
1884768112=magicoff,17
-1624760229=emotion
1884768113=magicoff,18
-353951458=attention
279431252=garden of autumn
422652266=small_button
1884768107=magicoff,12
1884768108=magicoff,13
375695247=the far side
1884768105=magicoff,10
1884768106=magicoff,11
-528864109=crystal sword
1884768109=magicoff,14
1959211570=mapfunction,60
-158141423=prayeron,7
-158141424=prayeron,6
1959211571=mapfunction,61
-158141421=prayeron,9
1959211572=mapfunction,62
-158141422=prayeron,8
1959211573=mapfunction,63
1959211574=mapfunction,64
688840255=piscarilius_sigil
1959211575=mapfunction,65
1959211576=mapfunction,66
1170407052=headicons_prayer
1959211577=mapfunction,67
-324496873=soundscape
-1418445703=tex_red
1961540869=wornicons,10
-1028580907=that_sullen_hall
397136995=elfpainting
-2092714094=haunted mine
1959211578=mapfunction,68
1959211579=mapfunction,69
-158141429=prayeron,1
-158141427=prayeron,3
-140492390=bunny_sugar_rush
-158141428=prayeron,2
-158141425=prayeron,5
1827366203=righteousness
-649601274=darkness_in_the_depths
-158141426=prayeron,4
1961540870=wornicons,11
-158141430=prayeron,0
910299584=principality
-734028978=arrow,1
-734028979=arrow,0
790067275=garden of spring
35762567=workshop
-1095396929=competition
96463963=egypt
-1154441378=jollyr
-1685231711=cave background
-2078908549=time out
-1172405897=wildwood
-170561624=spookyjungle
2110231453=mod_icons
2061491048=shining
-1063411723=tremble
94627585=chest
-520702427=ice melody
1346720899=backleft1
-607416919=prayeron,25
-607416918=prayeron,26
900197712=staticons,6
-607416917=prayeron,27
900197713=staticons,7
-607416916=prayeron,28
900197710=staticons,4
-607416915=prayeron,29
900197711=staticons,5
957931606=courage
900197714=staticons,8
900197715=staticons,9
-720253066=the other side
-1655721374=prayeroff,31
-607416921=prayeron,23
-1655721375=prayeroff,30
-607416920=prayeron,24
-710515142=the mad mole
-1350228392=stratosphere
-1666438445=combaticons2,3
-1666438446=combaticons2,2
-1666438443=combaticons2,5
-1666438444=combaticons2,4
-1106570438=legion
-1666438441=combaticons2,7
-1666438442=combaticons2,6
1398587265=flute salad
-1666438440=combaticons2,8
837223705=mapedge
900197709=staticons,3
-243680393=peng_emotes,7
900197707=staticons,1
378300078=everlasting
900197708=staticons,2
-944748869=witching
-243680396=peng_emotes,4
-1335336992=logo_deadman_mode
-1368714737=small_button_blue
-795140435=wander
-243680397=peng_emotes,3
-243680394=peng_emotes,6
-1666438447=combaticons2,1
-243680395=peng_emotes,5
-1666438448=combaticons2,0
-243680398=peng_emotes,2
-243680399=peng_emotes,1
-607416924=prayeron,20
900197706=staticons,0
-607416923=prayeron,21
-607416922=prayeron,22
3016376=bark
-89244313=romper chomper
346288985=dorgeshun deep
1585002399=magicon,21
-1725263140=chef surprize
1585002398=magicon,20
-993528987=making waves
-628963539=ham and seek
-1666438439=combaticons2,9
-333224315=baroque
-1236252722=prime time
280241284=waking dream
-564582358=distant land
115411843=castlewars
1513246078=al kharid
-1377700863=unknown land
1264132816=miles away
1185785872=barbassault_icons,3
1185785873=barbassault_icons,4
-1655721397=prayeroff,29
-1655721398=prayeroff,28
1185785874=barbassault_icons,5
-1655721399=prayeroff,27
1185785875=barbassault_icons,6
1711341885=fight or flight
1185785870=barbassault_icons,1
1185785871=barbassault_icons,2
3530505=sire
-309570839=pick_and_shovel
647234089=distillery hilarity
-127408236=gnome_village_party
1337378554=backbase2
109757537=stars
1337378553=backbase1
109757538=start
819884325=wilderness3
1328851775=close_buttons,1
658759958=side_background
1328851774=close_buttons,0
-782211141=wonder
1328851777=close_buttons,3
-1995718284=wall_white
819884324=wilderness2
1328851776=close_buttons,2
1328851779=close_buttons,5
-943885542=scape hunter
1328851778=close_buttons,4
1185785869=barbassault_icons,0
-607416949=prayeron,16
-607416948=prayeron,17
-1779684630=rune essence
-607416947=prayeron,18
-607416946=prayeron,19
1119460311=bandos battalion
-967559823=creature cruelty
-1904094243=zeah_fishing
-1913214770=wilderness
460367020=village
825919161=options_icons,39
1585002375=magicon,18
94839810=coins
1585002376=magicon,19
825919160=options_icons,38
-1282090556=faerie
-521895311=the adventurer
788399136=tree spirits
-1902858744=beneath_the_stronghold
-356730043=pirates of penance
1185785876=barbassault_icons,7
825919158=options_icons,36
825919159=options_icons,37
825919156=options_icons,34
-1455241861=victory is mine
825919157=options_icons,35
-1333874720=side_icons,17
825919154=options_icons,32
825919155=options_icons,33
825919152=options_icons,30
825919153=options_icons,31
1437805631=chatback
-1623296531=ground scape
685190118=in the brine
1366257555=nightfall
110327241=theme
-1333874725=side_icons,12
-1333874726=side_icons,11
-1333874727=side_icons,10
-1333874721=side_icons,16
-1333874722=side_icons,15
-1124681475=darkly_altared
-8976533=throne of the demon
-1333874723=side_icons,14
-1333874724=side_icons,13
-1989106719=assault and battery
1958759012=greatness
1057075019=b12_full
1143353537=chain of command
-51091830=desert voyage
-1073927447=mirage
-91048728=number_button
3165239=gaol
-1380919269=breeze
445640248=rugged_terrain
106079=key
-655784411=overlay_multiway
-1025835715=backright2
-1025835716=backright1
1120933843=scape main
3225350=iban
-956253112=title fight
-123912401=la mort
1585002367=magicon,10
-2128736428=startgame
1585002368=magicon,11
-925031874=royale
1585002369=magicon,12
1585002370=magicon,13
1585002373=magicon,16
1585002374=magicon,17
-1307116191=superstition
1585002371=magicon,14
1585002372=magicon,15
-587569902=path of peril
3392903=null
-1601127242=inadequacy
2136330800=staticons2,0
2136330801=staticons2,1
344336468=grip of the talon
2136330804=staticons2,4
2136330805=staticons2,5
2136330802=staticons2,2
2136330803=staticons2,3
1960215130=barking mad
-43712789=scape original
621171714=cellar song
1585002461=magicon,41
1585002462=magicon,42
1585002460=magicon,40
111485446=upass
2136330808=staticons2,8
694847251=in the manor
2136330809=staticons2,9
2136330806=staticons2,6
2136330807=staticons2,7
-1385847955=rightarrow
1343200077=the slayer
1585002465=magicon,45
1585002466=magicon,46
1585002463=magicon,43
1585002464=magicon,44
1585002469=magicon,49
-95571520=volcanic vikings
1585002467=magicon,47
1585002468=magicon,48
-1032629963=shipwrecked
93330745=aztec
-881372797=tabs,1
1377351472=oriental
121641580=headicons_hint
-881372798=tabs,0
1585002438=magicon,39
-1661605940=elfwood
-607416893=prayeron,30
-822106577=jungle island xmas
-607416892=prayeron,31
332368736=mad eadgar
1585002432=magicon,33
-143368781=side_background_right
1585002433=magicon,34
-1081494434=malady
1585002430=magicon,31
1585002431=magicon,32
1585002436=magicon,37
1585002437=magicon,38
1585002434=magicon,35
1585002435=magicon,36
-1938171360=miscgraphics3,0
-1059680853=trinity
781557721=dies_irae
-1938171359=miscgraphics3,1
497375231=stillness
-1938171358=miscgraphics3,2
-1938171357=miscgraphics3,3
-960709976=dogs of war
2129339089=magicon,1
2129339088=magicon,0
755433248=headicons_pk
108392383=regal
-213632750=waterfall
-1367706280=canvas
73828649=settlement
848123561=into the abyss
478781900=last stand
1339486127=the shadow
-1055503808=roc and roll
837204902=mapdots
950484242=compass
-1082154559=fanfare
747848680=nether_realm
788224888=dead quiet
1532279978=monarch waltz
-149029727=side_background_left1
812947089=fanfare2
-149029726=side_background_left2
1006643748=high spirits
-2136059388=starlight
2122572442=the tower
-1998869913=spooky2
1411067174=gnome village2
-2065077267=wild side
812947090=fanfare3
1585002429=magicon,30
1294629755=on the wing
2097127567=monkey badness
-2032107216=sojourn
1020264019=pest control
3237038=info
1473393027=fe fi fo fum
-1686202291=upper_depths
3540994=stop
1742080803=darkwood
740392969=little cave of horrors
-158379532=prayerglow
-691855347=in between
-200702983=the noble rodent
1652745754=forgotten
-1895307673=hitmark,3
-1895307674=hitmark,2
-1895307675=hitmark,1
-1895307676=hitmark,0
-1895307670=hitmark,6
-1895307671=hitmark,5
-1895307672=hitmark,4
1968917071=bone dry
-850506182=trawler minor
197029040=mapscene
-808772318=in the pits
-1165315580=looking back
-1763090403=scape_ape
-1938177931=miscgraphics,11
-1938177932=miscgraphics,10
1936130561=thrall_of_the_serpent
1258863383=yesteryear
1994744000=slice of silent movie
-1691854169=dead can dance
1585002407=magicon,29
1585002405=magicon,27
1585002406=magicon,28
271319484=frostbite
-499867199=meridian
1585002400=magicon,22
-1938177930=miscgraphics,12
-84626226=mudskipper melody
1585002403=magicon,25
1585002404=magicon,26
3641802=wall
1585002401=magicon,23
1585002402=magicon,24
-606457701=wolf mountain
1276599785=button_brown
1969878899=emotes,13
1969878897=emotes,11
1969878898=emotes,12
1969878896=emotes,10
-1938177928=miscgraphics,14
-907669678=brew hoo hoo
-1938177929=miscgraphics,13
72999866=subterranea
619237947=the galleon
-1764950404=scape sad
295831445=heart and mind
908430134=dangerous road
738888631=tradebacking
-174800339=verdana_11pt_regular
686705631=lightwalk
-601591436=side_background_bottom
-1479412376=the navigator
-359173459=zamorak zoo
744536246=null and void
-1701556798=magicoff2,39
-1701556799=magicoff2,38
-1396384012=bamboo
-200388662=lighthouse
133626717=suspicious
-810515425=voyage
3061973=crag
1802291895=big chords
-1661619479=elfwall
113315621=wood2
1813041183=steelborder2,0
429244831=slug a bug ball
1813041184=steelborder2,1
-1658386264=shining_spirit
738909086=chamber
526264239=verdana_13pt_regular
-877351859=temple
2142215577=the mollusc menace
1124498189=warpath
-2136649922=no way out
-339706871=grimly_fiendish
547534551=wrath and ruin
544229147=lore and order
3327206=load
1610073470=lovakengj_sigil
-419218284=long way home
-662489856=food for thought
1306461568=stagnant
-1662171955=elfdoor
-1043985601=meddling kids
947464074=titlebutton
-1309055712=exposed
-1487348923=ambient jungle
-1829469821=lament of meiyerditch
233203434=leftarrow_small
-1216167350=dangerous
114464611=railings
-1106574323=legend
-1701556767=magicoff2,49
-999707515=time to mine
-1701556768=magicoff2,48
2129339097=magicon,9
2129339096=magicon,8
1959211510=mapfunction,42
2129339095=magicon,7
1959211511=mapfunction,43
2129339094=magicon,6
2129339093=magicon,5
2129339092=magicon,4
2129339091=magicon,3
2129339090=magicon,2
3522472=saga
-1701556769=magicoff2,47
-544722449=rellekka
1033441676=tribal background
1915718129=the desolate isle
1890607150=magicon2,19
1787618597=stranded
1717999087=forgettable melody
1959211512=mapfunction,44
-243680400=peng_emotes,0
1959211513=mapfunction,45
1959211514=mapfunction,46
1959211515=mapfunction,47
1959211516=mapfunction,48
1959211517=mapfunction,49
1705947058=the cellar dwellers
1216634785=landlubber
1884768198=magicoff,40
-1588113323=the rogues den
1884768199=magicoff,41
-905842564=serene
-607599698=prayeroff,2
-607599699=prayeroff,1
1890607142=magicon2,11
1389384362=monkey trouble
1890607143=magicon2,12
1890607144=magicon2,13
1890607145=magicon2,14
1890607146=magicon2,15
1890607147=magicon2,16
1890607148=magicon2,17
1966766798=mausoleum
1890607149=magicon2,18
1808345541=armadyl alliance
290391725=options_slider,7
1890607141=magicon2,10
290391722=options_slider,4
-607599696=prayeroff,4
290391721=options_slider,3
-607599697=prayeroff,3
290391724=options_slider,6
-607599694=prayeroff,6
290391723=options_slider,5
-607599695=prayeroff,5
-607599692=prayeroff,8
-607599693=prayeroff,7
290391720=options_slider,2
-607599691=prayeroff,9
1334775925=chat_background
-1779127378=arabian2
-1779127377=arabian3
528722471=island life
1890607175=magicon2,23
1890607176=magicon2,24
949634504=mouse trap
1890607177=magicon2,25
1890607178=magicon2,26
1890607179=magicon2,27
3327403=logo
290391719=options_slider,1
1092249049=storm brew
290391718=options_slider,0
404357804=everywhere
1890607172=magicon2,20
1890607173=magicon2,21
951530772=contest
1890607174=magicon2,22
-1701556776=magicoff2,40
1884768176=magicoff,39
-395250469=corporal punishment
1749113330=newbie melody
1884768174=magicoff,37
1884768175=magicoff,38
-1701556772=magicoff2,44
-1701556773=magicoff2,43
-1701556774=magicoff2,42
-1701556775=magicoff2,41
-858121616=tzhaar
1884768172=magicoff,35
1884768173=magicoff,36
666772244=combat_shield
1884768170=magicoff,33
1884768171=magicoff,34
1959211509=mapfunction,41
1639695510=mapmarker
-1661748240=friends_icons
-552301350=knightly
-1918044851=mastermindless
-1701556770=magicoff2,46
-1701556771=magicoff2,45
201526300=corporealbeast
1959211508=mapfunction,40
105001967=nomad
-70910145=clickcross,3
-1737914947=mapfunction,5
1801745440=staticons2,11
-70910146=clickcross,2
-865479038=tribal
-1737914946=mapfunction,6
1801745441=staticons2,12
-70910147=clickcross,1
-1737914945=mapfunction,7
1801745442=staticons2,13
-70910148=clickcross,0
-1737914944=mapfunction,8
1801745443=staticons2,14
-1737914943=mapfunction,9
1801745444=staticons2,15
1801745445=staticons2,16
1801745446=staticons2,17
-1877545169=land down under
93921962=books
-1737914949=mapfunction,3
-1737914948=mapfunction,4
-1655721428=prayeroff,19
-2136884405=title.jpg
-1655721429=prayeroff,18
1584819628=magicoff,6
1584819629=magicoff,7
437480876=voodoo cult
1584819624=magicoff,2
1584819625=magicoff,3
1584819626=magicoff,4
-1737914952=mapfunction,0
1584819627=magicoff,5
-1737914951=mapfunction,1
124995564=harmony2
1584819622=magicoff,0
1801745439=staticons2,10
1584819623=magicoff,1
346263512=dorgeshun city
-1665011705=down and out
1890607180=magicon2,28
1890607181=magicon2,29
1417471781=titlescroll
1959211446=mapfunction,20
1956141536=options_radio_buttons,0
736568812=ballad of enchantment
-1737914950=mapfunction,2
1959211447=mapfunction,21
1959211448=mapfunction,22
1959211449=mapfunction,23
-1890130256=morytania
-70910141=clickcross,7
-70910142=clickcross,6
1956141539=options_radio_buttons,3
-70910143=clickcross,5
1956141538=options_radio_buttons,2
284766976=splendour
-70910144=clickcross,4
1956141537=options_radio_buttons,1
196677638=the quizmaster
530068296=overture
-1123094568=sl_button
-700552779=hosidius_sigil
-614076819=sad meadow
1956141543=options_radio_buttons,7
1956141542=options_radio_buttons,6
1956141541=options_radio_buttons,5
1956141540=options_radio_buttons,4
1584819631=magicoff,9
1846633612=gnome village
-2128560371=sl_back
1969878905=emotes,19
306819362=crystal castle
1584819630=magicoff,8
1969878903=emotes,17
303737220=options_icons,7
1969878904=emotes,18
1969878901=emotes,15
-78220817=devils_may_care
1969878902=emotes,16
-40521666=dimension x
1969878900=emotes,14
673424924=the lunar isle
789609582=brimstail's scales
303737222=options_icons,9
303737221=options_icons,8
1959211415=mapfunction,10
3059343=coil
1959211416=mapfunction,11
1959211417=mapfunction,12
-1256560486=last_man_standing
1959211418=mapfunction,13
336238005=rightarrow_small
1959211419=mapfunction,14
-677662361=forever
-1655721430=prayeroff,17
-1655721431=prayeroff,16
-1655721432=prayeroff,15
1959211420=mapfunction,15
1959211663=mapfunction,90
1959211421=mapfunction,16
1959211422=mapfunction,17
1959211423=mapfunction,18
303737217=options_icons,4
303737216=options_icons,3
303737215=options_icons,2
-1665005042=funny bunnies
303737214=options_icons,1
303737219=options_icons,6
303737218=options_icons,5
303737213=options_icons,0
95997798=we are the fairies
2001751835=desert heat
1959211424=mapfunction,19
-1655721437=prayeroff,10
687938017=clanwars
-1776024210=desolate_mage
-650944128=strength of saradomin
-1655721433=prayeroff,14
1160873524=aye car rum ba
-1655721434=prayeroff,13
-1655721435=prayeroff,12
-1081314499=marble
-1655721436=prayeroff,11
1097075475=reset,0
1959211477=mapfunction,30
-693313916=warriors guild
3506388=roof
1959211478=mapfunction,31
1097075476=reset,1
-2134967800=dagannoth dawn
-985763247=planks
1959211479=mapfunction,32
1999746381=fenkenstrain's refrain
898010371=garden of winter
359174830=rat hunt
1959211482=mapfunction,35
686441581=lightness
1959211483=mapfunction,36
1959211484=mapfunction,37
1959211485=mapfunction,38
1959211486=mapfunction,39
2023201035=dwarf theme
1959211480=mapfunction,33
1959211481=mapfunction,34
-1065532022=combatboxes,1
-1065532021=combatboxes,2
-1065532020=combatboxes,3
1867160429=old_tiles
394756979=scape santa
25205919=elfroof2
-663428071=dangerous way
-1065532023=combatboxes,0
1959211450=mapfunction,24
-895939599=spirit
1959211451=mapfunction,25
1959211452=mapfunction,26
1959211453=mapfunction,27
1959211454=mapfunction,28
1959211455=mapfunction,29
-275310687=undercurrent
212205923=goblin village
-303898981=faithless
-1381531001=tomb raider
260940912=marzipan
1343267530=backhmid1
1343267531=backhmid2
1097468315=horizon
-1655721404=prayeroff,22
623451622=kourend_the_magnificent
-1655721405=prayeroff,21
-1655721406=prayeroff,20
-1655721400=prayeroff,26
-313384067=p12_full
-1655721401=prayeroff,25
-1655721402=prayeroff,24
-1655721403=prayeroff,23
95848451=dream
1966781751=maws_jaws_claws
-995428255=parade
95734525=method of madness
-1308064877=hitmarks
1030045177=mutant medley
1333034828=blackmark
851641665=davy jones locker
417793574=scrollbar
1346720900=backleft2
1884768206=magicoff,48
1884768207=magicoff,49
1801140808=fangs for the memory
1884768204=magicoff,46
1345432055=pinball wizard
1884768205=magicoff,47
-783693496=dance of the undead
1274780903=chompy hunt
465278529=the lost tribe
-1666437481=combaticons3,6
2032696205=cabin fever
-1666437480=combaticons3,7
1825640471=borderland
415928477=zeah_mining
1884768202=magicoff,44
-607599700=prayeroff,0
1884768203=magicoff,45
1884768200=magicoff,42
1884768201=magicoff,43
-1666437487=combaticons3,0
-1666437486=combaticons3,1
813726263=crystal cave
1235442953=pathways
518814479=lullaby
-1666437483=combaticons3,4
1585007985=magicon2,7
-1666437482=combaticons3,5
1585007986=magicon2,8
-1666437485=combaticons3,2
1585007987=magicon2,9
-1666437484=combaticons3,3
104080482=moody
1969878967=emotes,39
-665666447=work work work
1364992651=evil bobs island
1969878965=emotes,37
1227328817=verdana_15pt_regular
1969878966=emotes,38
1969878963=emotes,35
1581724013=monkey business
1969878964=emotes,36
-74307138=miscellania
1969878961=emotes,33
1969878962=emotes,34
1969878960=emotes,32
1131171307=wayward
-1154558416=sl_arrows
529929957=overpass
1258058669=huffman
-694094064=adventure
1171698653=orb_xp,1
1171698652=orb_xp,0
1171698655=orb_xp,3
1171698654=orb_xp,2
1802171733=arceuus_sigil
221109227=tears of guthix
-1661754893=elfroof
-1666437478=combaticons3,9
1124565314=warrior
1969878958=emotes,30
1969878959=emotes,31
-934797897=reggae
2110260221=the genie
-1666437479=combaticons3,8
104257585=mummy
-1923924724=sworddecor,0
2136325196=staticons,17
-1332194002=background
2136164423=homescape
-1923924721=sworddecor,3
2136325194=staticons,15
-1923924722=sworddecor,2
-873564465=tiptoe
2136325195=staticons,16
-1923924723=sworddecor,1
123560953=espionage
2136325192=staticons,13
2136325193=staticons,14
1038911415=gnome king
2136325190=staticons,11
2136325191=staticons,12
1854274741=karamja jam
1969878989=emotes,40
-1242708793=glyphs
563269755=the terrible tower
1650323088=twilight
-12868552=sea shanty
289742397=book of spells
1880989696=dragontooth island
2136325189=staticons,10
110873=pen
-454421102=out of the deep
825919099=options_icons,19
825919097=options_icons,17
825919098=options_icons,18
-1349119470=cursed
1585007978=magicon2,0
825919095=options_icons,15
1585007979=magicon2,1
825919096=options_icons,16
825919093=options_icons,13
825919094=options_icons,14
825919091=options_icons,11
825919092=options_icons,12
-895977880=sphinx
-874529881=city of the dead
825919090=options_icons,10
1585007981=magicon2,3
1585007982=magicon2,4
1585007983=magicon2,5
-1618729246=body parts
1585007984=magicon2,6
1585007980=magicon2,2
1086075866=shayzien_sigil
2103661451=jester minute
-911346307=steelborder,2
-1809781334=button_brown_big
-911346306=steelborder,3
-816227352=vision
-911346309=steelborder,0
109407595=shine
-911346308=steelborder,1
-119954464=combaticons3,12
-119954465=combaticons3,11
-1846853118=armageddon
-119954462=combaticons3,14
-119954463=combaticons3,13
-119954460=combaticons3,16
-908183966=scarab
-119954461=combaticons3,15
-282886672=home sweet home
103666243=march
1969878929=emotes,22
1643875326=fire and brimstone
1969878927=emotes,20
-119954466=combaticons3,10
1969878928=emotes,21
-839455633=close quarters
941457503=way of the enchanter
-1453405761=mor-ul-rek
-415134015=have a blast
-1658514874=floating free
1213477442=chickened out
-1619800349=emotes_locked,27
-599680631=fear and loathing
-1081041422=insect queen
-1268786147=forest
-119954459=combaticons3,17
-119954457=combaticons3,19
-119954458=combaticons3,18
-850395529=trouble brewing
-1773920521=cave of the goblins
-771284962=claustrophobia
1310729739=bankbuttons,2
1306691868=upcoming
1465443077=over to nardah
1310729744=bankbuttons,7
1310729743=bankbuttons,6
1310729742=bankbuttons,5
1234827707=deep wildy
-90350772=xenophobe
-750127868=arabian
1310729741=bankbuttons,4
1310729740=bankbuttons,3
1041911129=waterlogged
108875897=runes
1447063382=barb wire
-378865792=magic dance
285466503=overlay_duel
1814287296=zeah_magic
1976894499=down to earth
1969878936=emotes,29
1969878934=emotes,27
-1567437308=deadlands
1969878935=emotes,28
1310729738=bankbuttons,1
1969878932=emotes,25
-957019274=too many cooks
1310729737=bankbuttons,0
2092627105=silence
1969878933=emotes,26
1969878930=emotes,23
1969878931=emotes,24
-901674570=well of voyage
1787935731=quill_oblique_large
-365283881=quill_caps_large
1157777820=lunar_alphabet
24702590=lunar_alphabet_lrg


================================================
FILE: config/server-config.example.json
================================================
{
    "configDir": "./config",
    "cacheDir": "./cache",

    "host": "0.0.0.0",
    "port": 43594,

    "updateServerHost": "0.0.0.0",
    "updateServerPort": 43592,

    "loginServerHost": "0.0.0.0",
    "loginServerPort": 43591,
    "rsaMod": "119568088839203297999728368933573315070738693395974011872885408638642676871679245723887367232256427712869170521351089799352546294030059890127723509653145359924771433131004387212857375068629466435244653901851504845054452735390701003613803443469723435116497545687393297329052988014281948392136928774011011998343",
    "rsaExp": "12747337179295870166838611986189126026507945904720545965726999254744592875817063488911622974072289858092633084100280214658532446654378876853112046049506789703022033047774294965255097838909779899992870910011426403494610880634275141204442441976355383839981584149269550057129306515912021704593400378690444280161",
    "encryptionEnabled": true,
    "playerSavePath": "./data/saves",

    "showWelcome": true,
    "expRate": 1,
    "giveAchievements": true,
    "checkCredentials": true,
    "tutorialEnabled": false,
    "adminDropsEnabled": true,
    "bypassTeleportRequirements": false
}


================================================
FILE: data/config/combat-styles.json
================================================
{
    "unarmed": [
        {
            "type": "crush",
            "exp": "attack",
            "anim": "punch",
            "button_id": 2
        },
        {
            "type": "crush",
            "exp": "strength",
            "anim": "kick",
            "button_id": 3
        },
        {
            "type": "crush",
            "exp": "defence",
            "anim": "punch",
            "button_id": 4
        }
    ],
    "axe": [
        {
            "type": "slash",
            "exp": "attack",
            "anim": "slash",
            "button_id": 2
        },
        {
            "type": "slash",
            "exp": "strength",
            "anim": "slash",
            "button_id": 5
        },
        {
            "type": "crush",
            "exp": "strength",
            "anim": "slash",
            "button_id": 4
        },
        {
            "type": "slash",
            "exp": "defence",
            "anim": "slash",
            "button_id": 3
        }
    ],
    "dagger": [
        {
            "type": "stab",
            "exp": "attack",
            "anim": "stab",
            "button_id": 2
        },
        {
            "type": "stab",
            "exp": "strength",
            "anim": "stab",
            "button_id": 3
        },
        {
            "type": "slash",
            "exp": "strength",
            "anim": "slash",
            "button_id": 4
        },
        {
            "type": "stab",
            "exp": "defence",
            "anim": "stab",
            "button_id": 5
        }
    ]
}


================================================
FILE: data/config/examine-item-data.yaml
================================================
- id: 0 # Dwarf remains
  examine: "The body of a Dwarf savaged by Goblins."
- id: 1 # Toolkit
  examine: "Good for repairing broken cannons."
- id: 2 # Cannonball
  examine: "Ammo for the Dwarf Cannon."
- id: 3 # Nulodion's notes
  examine: "Construction notes for Dwarf cannon ammo."
- id: 4 # Ammo mould
  examine: "Used to make cannon ammunition."
- id: 5 # Instruction manual
  examine: "An old note book."
- id: 6 # Cannon base
  examine: "The cannon is built on this."
- id: 8 # Cannon stand
  examine: "The mounting for the multicannon."
- id: 10 # Cannon barrels
  examine: "The barrels of the multicannon."
- id: 12 # Cannon furnace
  examine: "This powers the multicannon."
- id: 14 # Railing
  examine: "A metal railing replacement."
- id: 15 # Holy table napkin
  examine: "A cloth given to me by Sir Galahad."
- id: 16 # Magic whistle
  examine: "A small tin whistle."
- id: 17 # Grail bell
  examine: "I wonder what happens when I ring it?"
- id: 18 # Magic gold feather
  examine: "It will point the way for me."
- id: 19 # Holy grail
  examine: "A holy and powerful artefact."
- id: 20 # White cog
  examine: "A cog from some machinery."
- id: 21 # Black cog
  examine: "A cog from some machinery."
- id: 22 # Blue cog
  examine: "A cog from some machinery."
- id: 23 # Red cog
  examine: "A cog from some machinery."
- id: 24 # Rat poison
  examine: "Doesn't look very tasty."
- id: 25 # Red vine worm
  examine: "Wormy."
- id: 26 # Fishing trophy
  examine: "Hemenster fishing contest trophy."
- id: 27 # Fishing pass
  examine: "Pass to the Hemenster fishing contest."
- id: 28 # Insect repellent
  examine: "Drives away all known 6 legged creatures."
- id: 30 # Bucket of wax
  examine: "It's a bucket of wax."
- id: 32 # Lit black candle
  examine: "A lit spooky candle."
- id: 33 # Lit candle
  examine: "A lit candle."
- id: 35 # Excalibur
  examine: "This used to belong to King Arthur."
- id: 36 # Candle
  examine: "A candle."
- id: 38 # Black candle
  examine: "A spooky candle."
- id: 39 # Bronze arrowtips
  examine: "I can make some arrows with these."
- id: 40 # Iron arrowtips
  examine: "I can make some arrows with these."
- id: 41 # Steel arrowtips
  examine: "I can make some arrows with these."
- id: 42 # Mithril arrowtips
  examine: "I can make some arrows with these."
- id: 43 # Adamant arrowtips
  examine: "I can make some arrows with these."
- id: 44 # Rune arrowtips
  examine: "I can make some arrows with these."
- id: 45 # Opal bolt tips
  examine: "Opal bolt tips."
- id: 46 # Pearl bolt tips
  examine: "Pearl bolt tips."
- id: 47 # Barb bolttips
  examine: "I can make bolts with these."
- id: 48 # Longbow (u)
  examine: "I need to find a string for this."
- id: 50 # Shortbow (u)
  examine: "I need to find a string for this."
- id: 52 # Arrow shaft
  examine: "A wooden arrow shaft."
- id: 53 # Headless arrow
  examine: "A wooden arrow shaft with flights attached."
- id: 54 # Oak shortbow (u)
  examine: "An unstrung oak shortbow; I need a bowstring for this."
- id: 56 # Oak longbow (u)
  examine: "An unstrung oak longbow; I need a bowstring for this."
- id: 58 # Willow longbow (u)
  examine: "An unstrung willow longbow; I need a bowstring for this."
- id: 60 # Willow shortbow (u)
  examine: "An unstrung willow shortbow; I need a bowstring for this."
- id: 62 # Maple longbow (u)
  examine: "An unstrung maple longbow; I need a bowstring for this."
- id: 64 # Maple shortbow (u)
  examine: "An unstrung maple shortbow; I need a bowstring for this."
- id: 66 # Yew longbow (u)
  examine: "An unstrung yew longbow; I need a bowstring for this."
- id: 68 # Yew shortbow (u)
  examine: "An unstrung yew shortbow; I need a bowstring for this."
- id: 70 # Magic longbow (u)
  examine: "An unstrung magic longbow; I need a bowstring for this."
- id: 72 # Magic shortbow (u)
  examine: "An unstrung magic shortbow; I need a bowstring for this."
- id: 74 # Khazard helmet
  examine: "A helmet, as worn by the minions of General Khazard."
- id: 75 # Khazard armour
  examine: "Armour, as worn by the minions of General Khazard."
- id: 76 # Khazard cell keys
  examine: "These keys open the cells at the Khazard fight arena."
- id: 77 # Khali brew
  examine: "A bottle of Khazard's worst brew."
- id: 78 # Ice arrows
  examine: "Can only be fired from yew, magic, dark or twisted bows."
- id: 83 # Lever
  examine: "A lever to open something perhaps?"
- id: 84 # Staff of armadyl
  examine: "The power in this staff causes it to vibrate gently."
- id: 85 # Shiny key
  examine: "It catches the light!."
- id: 86 # Pendant of lucien
  examine: "An amulet made by Lucien."
- id: 87 # Armadyl pendant
  examine: "Worn by followers of Armadyl."
- id: 88 # Boots of lightness
  examine: "Magic boots that make you lighter than normal."
- id: 89 # Boots of lightness
  examine: "Magic boots that make you lighter than normal."
- id: 90 # Child's blanket
  examine: "It's very soft!"
- id: 113 # Strength potion(4)
  examine: "4 doses of Strength potion."
- id: 115 # Strength potion(3)
  examine: "3 doses of Strength potion."
- id: 117 # Strength potion(2)
  examine: "2 doses of Strength potion."
- id: 119 # Strength potion(1)
  examine: "1 dose of Strength potion."
- id: 121 # Attack potion(3)
  examine: "3 doses of Attack potion."
- id: 123 # Attack potion(2)
  examine: "2 doses of Attack potion."
- id: 125 # Attack potion(1)
  examine: "1 dose of Attack potion."
- id: 127 # Restore potion(3)
  examine: "3 doses of restore potion."
- id: 129 # Restore potion(2)
  examine: "2 doses of restore potion."
- id: 131 # Restore potion(1)
  examine: "1 dose of restore potion."
- id: 133 # Defence potion(3)
  examine: "3 doses of Defence potion."
- id: 135 # Defence potion(2)
  examine: "2 doses of Defence potion."
- id: 137 # Defence potion(1)
  examine: "1 dose of Defence potion."
- id: 139 # Prayer potion(3)
  examine: "3 doses of Prayer restore potion."
- id: 141 # Prayer potion(2)
  examine: "2 doses of Prayer restore potion."
- id: 143 # Prayer potion(1)
  examine: "1 dose of Prayer restore potion."
- id: 145 # Super attack(3)
  examine: "3 doses of super Attack potion."
- id: 147 # Super attack(2)
  examine: "2 doses of super Attack potion."
- id: 149 # Super attack(1)
  examine: "1 dose of super Attack potion."
- id: 151 # Fishing potion(3)
  examine: "3 doses of Fishing potion."
- id: 153 # Fishing potion(2)
  examine: "2 doses of Fishing potion."
- id: 155 # Fishing potion(1)
  examine: "1 dose of Fishing potion."
- id: 157 # Super strength(3)
  examine: "3 doses of super Strength potion."
- id: 159 # Super strength(2)
  examine: "2 doses of super Strength potion."
- id: 161 # Super strength(1)
  examine: "1 dose of super Strength potion."
- id: 163 # Super defence(3)
  examine: "3 doses of super Defence potion."
- id: 165 # Super defence(2)
  examine: "2 doses of super Defence potion."
- id: 167 # Super defence(1)
  examine: "1 dose of super Defence potion."
- id: 169 # Ranging potion(3)
  examine: "3 doses of ranging potion."
- id: 171 # Ranging potion(2)
  examine: "2 doses of ranging potion."
- id: 173 # Ranging potion(1)
  examine: "1 dose of ranging potion."
- id: 175 # Antipoison(3)
  examine: "3 doses of antipoison potion."
- id: 177 # Antipoison(2)
  examine: "2 doses of antipoison potion."
- id: 179 # Antipoison(1)
  examine: "1 dose of antipoison potion."
- id: 181 # Superantipoison(3)
  examine: "3 doses of super antipoison potion."
- id: 183 # Superantipoison(2)
  examine: "2 doses of super antipoison potion."
- id: 185 # Superantipoison(1)
  examine: "1 dose of super antipoison potion."
- id: 187 # Weapon poison
  examine: "For use on daggers and projectiles."
- id: 189 # Zamorak brew(3)
  examine: "3 doses of Zamorak brew."
- id: 191 # Zamorak brew(2)
  examine: "2 doses of Zamorak brew."
- id: 193 # Zamorak brew(1)
  examine: "1 dose of Zamorak brew."
- id: 195 # Potion
  examine: "This is meant to be good for spots."
- id: 197 # Poison chalice
  examine: "A cup of a strange brew..."
- id: 221 # Eye of newt
  examine: "It seems to be looking at me."
- id: 223 # Red spiders' eggs
  examine: "Ewww!"
- id: 225 # Limpwurt root
  examine: "The root of a limpwurt plant."
- id: 227 # Vial of water
  examine: "A glass vial containing water."
- id: 229 # Vial
  examine: "An empty glass vial."
- id: 231 # Snape grass
  examine: "Strange spiky grass."
- id: 233 # Pestle and mortar
  examine: "I can grind things for potions in this."
- id: 235 # Unicorn horn dust
  examine: "Finely ground horn of Unicorn."
- id: 237 # Unicorn horn
  examine: "This horn has restorative properties."
- id: 239 # White berries
  examine: "Sour berries, used in potions."
- id: 241 # Dragon scale dust
  examine: "Finely ground scale of Dragon."
- id: 243 # Blue dragon scale
  examine: "A large shiny scale."
- id: 245 # Wine of zamorak
  examine: "An evil wine for an evil god."
- id: 247 # Jangerberries
  examine: "They don't look very ripe."
- id: 249 # Guam leaf
  examine: "A bitter green herb."
- id: 251 # Marrentill
  examine: "A herb used in poison cures."
- id: 253 # Tarromin
  examine: "A useful herb."
- id: 255 # Harralander
  examine: "A useful herb."
- id: 257 # Ranarr weed
  examine: "A useful herb."
- id: 259 # Irit leaf
  examine: "A useful herb."
- id: 261 # Avantoe
  examine: "A useful herb."
- id: 263 # Kwuarm
  examine: "A powerful herb."
- id: 265 # Cadantine
  examine: "A powerful herb."
- id: 267 # Dwarf weed
  examine: "A powerful herb."
- id: 269 # Torstol
  examine: "A powerful herb."
- id: 271 # Pressure gauge
  examine: "It looks like part of a machine."
- id: 272 # Fish food
  examine: "Keeps your pet fish strong and healthy."
- id: 273 # Poison
  examine: "This stuff looks nasty."
- id: 274 # Poisoned fish food
  examine: "Doesn't seem very nice to the poor fishes."
- id: 275 # Key
  examine: "A slightly smelly key."
- id: 276 # Rubber tube
  examine: "It's slightly charred."
- id: 277 # Oil can
  examine: "It's pretty full."
- id: 278 # Cattleprod
  examine: "A sharp cattleprod."
- id: 279 # Sheep feed
  examine: "Councillor Halgrive gave me this to kill some sheep."
- id: 280 # Sheep bones (1)
  examine: "The suspicious-looking remains of a suspicious-looking sheep."
- id: 281 # Sheep bones (2)
  examine: "The suspicious-looking remains of a suspicious-looking sheep."
- id: 282 # Sheep bones (3)
  examine: "The suspicious-looking remains of a suspicious-looking sheep."
- id: 283 # Sheep bones (4)
  examine: "The suspicious-looking remains of a suspicious-looking sheep."
- id: 284 # Plague jacket
  examine: "This should protect me from the plague, I hope!"
- id: 285 # Plague trousers
  examine: "These should protect me from the plague, I hope!"
- id: 286 # Orange goblin mail
  examine: "Armour designed to fit goblins."
- id: 287 # Blue goblin mail
  examine: "Armour designed to fit goblins."
- id: 288 # Goblin mail
  examine: "Armour designed to fit goblins."
- id: 290 # Research package
  examine: "This contains some vital research results."
- id: 291 # Notes
  examine: "It seems to be written in some kind of code."
- id: 292 # Book on baxtorian
  examine: "A book on elven history in northern Gielinor."
- id: 294 # Glarial's pebble
  examine: "A small pebble with elven inscription."
- id: 295 # Glarial's amulet
  examine: "A bright green gem set in a necklace."
- id: 296 # Glarial's urn
  examine: "An urn containing Glarial's ashes."
- id: 299 # Mithril seeds
  examine: "Magical seeds in a mithril case."
- id: 300 # Rat's tail
  examine: "A bit of rat."
- id: 301 # Lobster pot
  examine: "Useful for catching lobsters."
- id: 303 # Small fishing net
  examine: "Useful for catching small fish."
- id: 305 # Big fishing net
  examine: "Useful for catching lots of fish."
- id: 307 # Fishing rod
  examine: "Useful for catching sardine or herring."
- id: 309 # Fly fishing rod
  examine: "Useful for catching salmon or trout."
- id: 311 # Harpoon
  examine: "Useful for catching really big fish."
- id: 313 # Fishing bait
  examine: "For use with a fishing rod."
- id: 314 # Feather
  examine: "Used for fly fishing."
- id: 315 # Shrimps
  examine: "Some nicely cooked shrimp."
- id: 317 # Raw shrimps
  examine: "I should try cooking this."
- id: 319 # Anchovies
  examine: "Some nicely cooked anchovies."
- id: 321 # Raw anchovies
  examine: "I should try cooking this."
- id: 323 # Burnt fish
  examine: "Oops!"
- id: 325 # Sardine
  examine: "Some nicely cooked sardines."
- id: 327 # Raw sardine
  examine: "I should try cooking this."
- id: 329 # Salmon
  examine: "Some nicely cooked salmon."
- id: 331 # Raw salmon
  examine: "I should try cooking this."
- id: 333 # Trout
  examine: "Some nicely cooked trout."
- id: 335 # Raw trout
  examine: "I should try cooking this."
- id: 337 # Giant carp
  examine: "Some nicely cooked giant carp."
- id: 338 # Raw giant carp
  examine: "I should try cooking this."
- id: 339 # Cod
  examine: "Some nicely cooked cod."
- id: 341 # Raw cod
  examine: "I should try cooking this."
- id: 343 # Burnt fish
  examine: "Oops!"
- id: 345 # Raw herring
  examine: "I should try cooking this."
- id: 347 # Herring
  examine: "Some nicely cooked herring."
- id: 349 # Raw pike
  examine: "I should try cooking this."
- id: 351 # Pike
  examine: "Some nicely cooked pike."
- id: 353 # Raw mackerel
  examine: "I should try cooking this."
- id: 355 # Mackerel
  examine: "Some nicely cooked mackerel."
- id: 357 # Burnt fish
  examine: "Oops!"
- id: 359 # Raw tuna
  examine: "I should try cooking this."
- id: 361 # Tuna
  examine: "Wow, this is a big fish."
- id: 363 # Raw bass
  examine: "I should try cooking this."
- id: 365 # Bass
  examine: "Wow, this is a big fish."
- id: 367 # Burnt fish
  examine: "Oops!"
- id: 369 # Burnt fish
  examine: "Oops!"
- id: 371 # Raw swordfish
  examine: "I should try cooking this."
- id: 373 # Swordfish
  examine: "I'd better be careful eating this!"
- id: 375 # Burnt swordfish
  examine: "Oops!"
- id: 377 # Raw lobster
  examine: "I should try cooking this."
- id: 379 # Lobster
  examine: "This looks tricky to eat."
- id: 381 # Burnt lobster
  examine: "Oops!"
- id: 383 # Raw shark
  examine: "I should try cooking this."
- id: 385 # Shark
  examine: "I'd better be careful eating this."
- id: 387 # Burnt shark
  examine: "Oops!"
- id: 389 # Raw manta ray
  examine: "A rare catch."
- id: 391 # Manta ray
  examine: "A rare catch."
- id: 393 # Burnt manta ray
  examine: "Oops!"
- id: 395 # Raw sea turtle
  examine: "A rare catch."
- id: 397 # Sea turtle
  examine: "Tasty!"
- id: 399 # Burnt sea turtle
  examine: "Oops!"
- id: 401 # Seaweed
  examine: "Slightly damp seaweed."
- id: 403 # Edible seaweed
  examine: "Slightly damp seaweed."
- id: 405 # Casket
  examine: "I hope there's treasure in it."
- id: 407 # Oyster
  examine: "Maybe there are pearls inside?"
- id: 409 # Empty oyster
  examine: "Aww, it's empty."
- id: 411 # Oyster pearl
  examine: "I could work wonders with a chisel on this pearl."
- id: 413 # Oyster pearls
  examine: "I could work wonders with a chisel on these pearls."
- id: 415 # Ethenea
  examine: "An expensive colourless liquid."
- id: 416 # Liquid honey
  examine: "This isn't worth much."
- id: 417 # Sulphuric broline
  examine: "It's highly poisonous."
- id: 418 # Plague sample
  examine: "Probably best I don't keep this too long."
- id: 419 # Touch paper
  examine: "A special kind of paper."
- id: 420 # Distillator
  examine: "Apparently it distills."
- id: 422 # Bird feed
  examine: "Birds love this stuff!"
- id: 423 # Key
  examine: "Opens things."
- id: 424 # Pigeon cage
  examine: "It's full of pigeons."
- id: 425 # Pigeon cage
  examine: "It's empty..."
- id: 426 # Priest gown
  examine: "Top half of a priest suit."
- id: 428 # Priest gown
  examine: "Bottom half of a priest suit."
- id: 431 # Karamjan rum
  examine: "A very strong spirit brewed in Karamja."
- id: 432 # Chest key
  examine: "A key to One-Eyed Hector's chest."
- id: 433 # Pirate message
  examine: "Pirates don't have the best handwriting..."
- id: 434 # Clay
  examine: "Some hard dry clay."
- id: 436 # Copper ore
  examine: "This needs refining."
- id: 438 # Tin ore
  examine: "This needs refining."
- id: 440 # Iron ore
  examine: "This needs refining."
- id: 442 # Silver ore
  examine: "This needs refining."
- id: 444 # Gold ore
  examine: "This needs refining."
- id: 446 # 'perfect' gold ore
  examine: "This needs refining."
- id: 447 # Mithril ore
  examine: "This needs refining."
- id: 449 # Adamantite ore
  examine: "This needs refining."
- id: 451 # Runite ore
  examine: "This needs refining."
- id: 453 # Coal
  examine: "Hmm a non-renewable energy source!"
- id: 455 # Barcrawl card
  examine: "The official Alfred Grimhand bar crawl card."
- id: 456 # Scorpion cage
  examine: "It's empty!"
- id: 457 # Scorpion cage
  examine: "There is 1 scorpion inside."
- id: 458 # Scorpion cage
  examine: "There are 2 scorpions inside."
- id: 459 # Scorpion cage
  examine: "There are 2 scorpions inside."
- id: 460 # Scorpion cage
  examine: "There is 1 scorpion inside."
- id: 461 # Scorpion cage
  examine: "There are 2 scorpions inside."
- id: 462 # Scorpion cage
  examine: "There is 1 scorpion inside."
- id: 463 # Scorpion cage
  examine: "There are 3 scorpions inside."
- id: 464 # Strange fruit
  examine: "I wonder what this tastes like?"
- id: 466 # Pickaxe handle
  examine: "Useless without the head."
- id: 468 # Broken pickaxe
  examine: "Nurmof can fix this for me."
- id: 470 # Broken pickaxe
  examine: "Nurmof can fix this for me."
- id: 472 # Broken pickaxe
  examine: "Nurmof can fix this for me."
- id: 474 # Broken pickaxe
  examine: "Nurmof can fix this for me."
- id: 476 # Broken pickaxe
  examine: "Nurmof can fix this for me."
- id: 478 # Broken pickaxe
  examine: "Nurmof can fix this for me."
- id: 480 # Bronze pick head
  examine: "It's missing a handle."
- id: 482 # Iron pick head
  examine: "It's missing a handle."
- id: 484 # Steel pick head
  examine: "It's missing a handle."
- id: 486 # Mithril pick head
  examine: "It's missing a handle."
- id: 488 # Adamant pick head
  examine: "It's missing a handle."
- id: 490 # Rune pick head
  examine: "It's missing a handle."
- id: 492 # Axe handle
  examine: "Useless without the head."
- id: 494 # Broken axe
  examine: "Bob can fix this for me."
- id: 496 # Broken axe
  examine: "Bob can fix this for me."
- id: 498 # Broken axe
  examine: "Bob can fix this for me."
- id: 500 # Broken axe
  examine: "Bob can fix this for me."
- id: 502 # Broken axe
  examine: "Bob can fix this for me."
- id: 504 # Broken axe
  examine: "Bob can fix this for me."
- id: 506 # Broken axe
  examine: "Bob can fix this for me."
- id: 522 # Enchanted beef
  examine: "I don't fancy eating this now."
- id: 523 # Enchanted rat
  examine: "I don't fancy eating this now."
- id: 524 # Enchanted bear
  examine: "I don't fancy eating this now."
- id: 525 # Enchanted chicken
  examine: "I don't fancy eating this now."
- id: 526 # Bones
  examine: "Bones are for burying!"
- id: 528 # Burnt bones
  examine: "Bones are for burying!"
- id: 530 # Bat bones
  examine: "Ew it's a pile of bones."
- id: 532 # Big bones
  examine: "Ew it's a pile of bones."
- id: 534 # Babydragon bones
  examine: "Ew it's a pile of bones."
- id: 536 # Dragon bones
  examine: "These would feed a dog for months!"
- id: 538 # Druid's robe
  examine: "Keeps a druid's knees nice and warm."
- id: 542 # Monk's robe
  examine: "Keeps a monk's knees nice and warm."
- id: 548 # Shade robe
  examine: "If a shade had knees, this would keep them nice and warm."
- id: 550 # Newcomer map
  examine: "Issued to all new citizens of Gielinor."
- id: 552 # Ghostspeak amulet
  examine: "It lets me talk to ghosts."
- id: 553 # Ghost's skull
  examine: "Ooooh spooky!"
- id: 554 # Fire rune
  examine: "One of the 4 basic elemental Runes."
- id: 555 # Water rune
  examine: "One of the 4 basic elemental Runes."
- id: 556 # Air rune
  examine: "One of the 4 basic elemental Runes."
- id: 557 # Earth rune
  examine: "One of the 4 basic elemental Runes."
- id: 558 # Mind rune
  examine: "Used for basic level missile spells."
- id: 559 # Body rune
  examine: "Used for curse spells."
- id: 560 # Death rune
  examine: "Used for medium level missile spells."
- id: 561 # Nature rune
  examine: "Used for alchemy spells."
- id: 562 # Chaos rune
  examine: "Used for low level missile spells."
- id: 563 # Law rune
  examine: "Used for teleport spells."
- id: 564 # Cosmic rune
  examine: "Used for enchant spells."
- id: 565 # Blood rune
  examine: "Used for high level missile spells."
- id: 566 # Soul rune
  examine: "Used for high level curse spells."
- id: 567 # Unpowered orb
  examine: "I'd prefer it if it was powered."
- id: 569 # Fire orb
  examine: "A magic glowing orb."
- id: 571 # Water orb
  examine: "A magic glowing orb."
- id: 573 # Air orb
  examine: "A magic glowing orb."
- id: 575 # Earth orb
  examine: "A magic glowing orb."
- id: 581 # Black robe
  examine: "I can do magic better in this."
- id: 583 # Bailing bucket
  examine: "It's a bailing bucket."
- id: 585 # Bailing bucket
  examine: "It's a bailing bucket full of salty water."
- id: 587 # Orb of protection
  examine: "A strange glowing green orb."
- id: 588 # Orbs of protection
  examine: "Two strange glowing green orbs."
- id: 589 # Gnome amulet
  examine: "It's an amulet of protection given to me by the gnomes."
- id: 590 # Tinderbox
  examine: "Useful for lighting a fire."
- id: 592 # Ashes
  examine: "A heap of ashes."
- id: 594 # Lit torch
  examine: "A lit home-made torch."
- id: 595 # Torch
  examine: "An unlit home-made torch."
- id: 596 # Unlit torch
  examine: "An unlit home-made torch."
- id: 602 # Lens mould
  examine: "An unusual mould in the shape of a disc."
- id: 604 # Bone shard
  examine: "A slender bone shard given to you by Zadimus."
- id: 605 # Bone key
  examine: "A bone key fashioned from a shard of bone."
- id: 606 # Stone-plaque
  examine: "A stone plaque with carved letters in it."
- id: 607 # Tattered scroll
  examine: "An ancient tattered scroll."
- id: 608 # Crumpled scroll
  examine: "An ancient crumpled scroll."
- id: 609 # Rashiliyia corpse
  examine: "The remains of the Zombie Queen."
- id: 610 # Zadimus corpse
  examine: "The remains of Zadimus."
- id: 611 # Locating crystal
  examine: "A magical crystal sphere."
- id: 612 # Locating crystal
  examine: "A magical crystal sphere."
- id: 613 # Locating crystal
  examine: "A magical crystal sphere."
- id: 614 # Locating crystal
  examine: "A magical crystal sphere."
- id: 615 # Locating crystal
  examine: "A magical crystal sphere."
- id: 616 # Beads of the dead
  examine: "A curious looking neck ornament."
- id: 617 # Coins
  examine: "Lovely money!"
- id: 618 # Bone beads
  examine: "Beads carved out of a bone."
- id: 619 # Paramaya ticket
  examine: "Allows you to rest in the luxurious Paramayer Inn."
- id: 621 # Ship ticket
  examine: "Allows you passage on the 'Lady of the waves' ship."
- id: 623 # Sword pommel
  examine: "An ivory sword pommel."
- id: 624 # Bervirius notes
  examine: "Notes taken from the tomb of Bervirius."
- id: 625 # Wampum belt
  examine: "A decorated belt used to trade information between distant villages."
- id: 666 # Portrait
  examine: "Picture of a posing Paladin."
- id: 667 # Blurite sword
  examine: "A Faladian Knight's sword."
- id: 668 # Blurite ore
  examine: "Definitely blue."
- id: 669 # Specimen jar
  examine: "A receptacle for specimens!"
- id: 670 # Specimen brush
  examine: "A small brush used to clean rock samples."
- id: 671 # Animal skull
  examine: "A carefully-kept-safe skull sample."
- id: 672 # Special cup
  examine: "A special cup."
- id: 673 # Teddy
  examine: "A lucky mascot."
- id: 674 # Cracked sample
  examine: "A roughly shaped piece of rock."
- id: 675 # Rock pick
  examine: "A small pick for digging."
- id: 676 # Trowel
  examine: "Used for digging!"
- id: 677 # Panning tray
  examine: "An empty tray for panning."
- id: 678 # Panning tray
  examine: "This tray contains gold."
- id: 679 # Panning tray
  examine: "This tray contains mud."
- id: 680 # Nuggets
  examine: "Pure, lovely gold!"
- id: 681 # Ancient talisman
  examine: "An unusual symbol as yet unidentified by the archaeological expert."
- id: 682 # Unstamped letter
  examine: "A letter waiting to be stamped."
- id: 683 # Sealed letter
  examine: "A sealed letter of recommendation."
- id: 684 # Belt buckle
  examine: "Used to hold up trousers!"
- id: 685 # Old boot
  examine: "Phew!"
- id: 686 # Rusty sword
  examine: "A decent-enough weapon gone rusty."
- id: 687 # Broken arrow
  examine: "This must have been shot at high speed."
- id: 688 # Buttons
  examine: "Not Dick Whittington's helper at all!"
- id: 689 # Broken staff
  examine: "I pity the poor person beaten with this!"
- id: 690 # Broken glass
  examine: "Smashed glass."
- id: 691 # Level 1 certificate
  examine: "The owner has passed the Earth Sciences level 1 exam."
- id: 692 # Level 2 certificate
  examine: "The owner has passed Earth Sciences level 2 exam."
- id: 693 # Level 3 certificate
  examine: "The owner has passed Earth Sciences level 3 exam."
- id: 694 # Ceramic remains
  examine: "Smashing!"
- id: 695 # Old tooth
  examine: "Now, if I can just find a tooth fairy to sell this to..."
- id: 696 # Invitation letter
  examine: "A letter inviting me to use the private dig shafts."
- id: 697 # Damaged armour
  examine: "It would be hard to repair this!"
- id: 698 # Broken armour
  examine: "No use to me in this state..."
- id: 699 # Stone tablet
  examine: "An old stone slab with writing on it."
- id: 700 # Chemical powder
  examine: "An acrid chemical."
- id: 701 # Ammonium nitrate
  examine: "An acrid chemical."
- id: 702 # Unidentified liquid
  examine: "A strong chemical."
- id: 703 # Nitroglycerin
  examine: "A strong chemical."
- id: 704 # Ground charcoal
  examine: "Charcoal - crushed to small pieces!"
- id: 705 # Mixed chemicals
  examine: "A mixture of strong chemicals."
- id: 706 # Mixed chemicals
  examine: "A mixture of strong chemicals."
- id: 707 # Chemical compound
  examine: "A mixture of strong chemicals."
- id: 708 # Arcenia root
  examine: "The root of an arcenia plant."
- id: 709 # Chest key
  examine: "This fits a chest."
- id: 710 # Vase
  examine: "A vessel for holding plants."
- id: 711 # Book on chemicals
  examine: "It's about chemicals, judging from its cover."
- id: 712 # Cup of tea
  examine: "A nice cup of tea."
- id: 714 # Radimus notes
  examine: "Notes given to you by Radimus Erkle, it includes a partially completed map."
- id: 715 # Radimus notes
  examine: "Notes given to you by Radimus Erkle, it includes a partially completed map."
- id: 716 # Bull roarer
  examine: "It makes a loud but interesting sound when swung in the air."
- id: 717 # Scrawled note
  examine: "A scrawled note with spidery writing on it."
- id: 718 # A scribbled note
  examine: "A scrawled note with spidery writing on it."
- id: 719 # Scrumpled note
  examine: "A scrawled note with spidery writing on it."
- id: 720 # Sketch
  examine: "A rough sketch of a bowl shaped vessel given to you by Gujuo."
- id: 721 # Gold bowl
  examine: "A specially made bowl constructed out of pure gold."
- id: 722 # Blessed gold bowl
  examine: "A specially made bowl constructed out of pure gold and blessed."
- id: 723 # Golden bowl
  examine: "A specially made golden bowl with water."
- id: 724 # Golden bowl
  examine: "A specially made bowl constructed out of pure gold. It has pure water in it."
- id: 725 # Golden bowl
  examine: "A blessed golden bowl. It has water in it."
- id: 726 # Golden bowl
  examine: "A blessed golden bowl. It has pure sacred water in it."
- id: 727 # Hollow reed
  examine: "One of nature's pipes."
- id: 729 # Shamans tome
  examine: "It looks like the Shamans personal notes..."
- id: 731 # Enchanted vial
  examine: "An enchanted empty glass vial."
- id: 732 # Holy water
  examine: "A vial of holy water, good against certain demons."
- id: 733 # Smashed glass
  examine: "Fragments of a broken container."
- id: 735 # Yommi tree seeds
  examine: "These need to be germinated before they can be used."
- id: 736 # Yommi tree seeds
  examine: "These are germinated and ready to be planted in fertile soil."
- id: 737 # Snakeweed mixture
  examine: "It's a mixture of Snakeweed and water. Needs another ingredient."
- id: 738 # Ardrigal mixture
  examine: "It's a mixture of Ardrigal and water. Needs another ingredient."
- id: 739 # Bravery potion
  examine: "A bravery potion for which Gujuo gave you the details, let's hope it works."
- id: 740 # Blue hat
  examine: "A strange blue wizards hat."
- id: 741 # Chunk of crystal
  examine: "It looks like it's been snapped off of something."
- id: 742 # Hunk of crystal
  examine: "It looks like it's been snapped off of something."
- id: 743 # Lump of crystal
  examine: "It looks like it's been snapped off of something."
- id: 744 # Heart crystal
  examine: "A heart shaped crystal."
- id: 745 # Heart crystal
  examine: "A heart shaped crystal."
- id: 746 # Dark dagger
  examine: "A black obsidian dagger, it has a strange aura about it."
- id: 747 # Glowing dagger
  examine: "A black obsidian dagger, it has a strange aura about it - it seems to be glowing."
- id: 748 # Holy force
  examine: "A powerful spell for good."
- id: 749 # Yommi totem
  examine: "A well carved totem pole made from the trunk of a Yommi tree."
- id: 750 # Gilded totem
  examine: "A gilded totem pole from the Kharazi tribe."
- id: 751 # Gnomeball
  examine: "A ball used in Gnomeball."
- id: 753 # Cadava berries
  examine: "Poisonous berries."
- id: 755 # Message
  examine: "A message from Juliet to Romeo."
- id: 756 # Cadava potion
  examine: "I'm meant to give this to Juliet."
- id: 757 # Book
  examine: "The Shield of Arrav by A R Wright."
- id: 763 # Broken shield
  examine: "Half of the Shield of Arrav."
- id: 765 # Broken shield
  examine: "Half of the Shield of Arrav."
- id: 767 # Phoenix crossbow
  examine: "Former property of the Phoenix Gang."
- id: 769 # Certificate
  examine: "I can use this to claim a reward from the King."
- id: 771 # Dramen branch
  examine: "A limb of the fabled Dramen tree."
- id: 772 # Dramen staff
  examine: "Crafted from a Dramen tree branch."
- id: 773 # 'perfect' ring
  examine: "A perfect ruby ring."
- id: 774 # 'perfect' necklace
  examine: "A perfect ruby necklace."
- id: 775 # Cooking gauntlets
  examine: "These gauntlets empower with a greater ability to cook fish."
- id: 777 # Chaos gauntlets
  examine: "These gauntlets empower spell casters."
- id: 778 # Steel gauntlets
  examine: "My reward for assisting the Fitzharmon family."
- id: 779 # Crest part
  examine: "A fragment of the Fitzharmon family crest."
- id: 780 # Crest part
  examine: "A fragment of the Fitzharmon family crest."
- id: 781 # Crest part
  examine: "A fragment of the Fitzharmon family crest."
- id: 782 # Family crest
  examine: "The Fitzharmon family crest."
- id: 783 # Bark sample
  examine: "A sample of the bark from the Grand Tree."
- id: 784 # Translation book
  examine: "A book to translate the ancient gnome language into English."
- id: 785 # Glough's journal
  examine: "Perhaps I should read it and see what Glough is up to!"
- id: 786 # Hazelmere's scroll
  examine: "Hazelmere wrote something down on this scroll."
- id: 787 # Lumber order
  examine: "An order from the Karamja shipyard."
- id: 788 # Glough's key
  examine: "The key to Glough's chest."
- id: 789 # Twigs
  examine: "Twigs bound together in the shape of a T."
- id: 790 # Twigs
  examine: "Twigs bound together in the shape of a U."
- id: 791 # Twigs
  examine: "Twigs bound together in the shape of a Z."
- id: 792 # Twigs
  examine: "Twigs bound together in the shape of a O."
- id: 793 # Daconia rock
  examine: "An ancient rock with strange magical properties."
- id: 794 # Invasion plans
  examine: "These are plans for an invasion!"
- id: 795 # War ship
  examine: "A model of a Karamja warship."
- id: 800 # Bronze thrownaxe
  examine: "A finely balanced throwing axe."
- id: 801 # Iron thrownaxe
  examine: "A finely balanced throwing axe."
- id: 802 # Steel thrownaxe
  examine: "A finely balanced throwing axe."
- id: 803 # Mithril thrownaxe
  examine: "A finely balanced throwing axe."
- id: 805 # Rune thrownaxe
  examine: "A finely balanced throwing axe."
- id: 806 # Bronze dart
  examine: "A deadly throwing dart with a bronze tip."
- id: 807 # Iron dart
  examine: "A deadly throwing dart with an iron tip."
- id: 808 # Steel dart
  examine: "A deadly throwing dart with a steel tip."
- id: 809 # Mithril dart
  examine: "A deadly throwing dart with a mithril tip."
- id: 810 # Adamant dart
  examine: "A deadly throwing dart with an adamant tip."
- id: 811 # Rune dart
  examine: "A deadly throwing dart with a rune tip."
- id: 812 # Bronze dart(p)
  examine: "A deadly poisoned dart with a bronze tip."
- id: 813 # Iron dart(p)
  examine: "A deadly poisoned dart with an iron tip."
- id: 814 # Steel dart(p)
  examine: "A deadly poisoned dart with a steel tip."
- id: 815 # Mithril dart(p)
  examine: "A deadly poisoned dart with a mithril tip."
- id: 816 # Adamant dart(p)
  examine: "A deadly poisoned dart with an adamant tip."
- id: 817 # Rune dart(p)
  examine: "A deadly poisoned dart with a rune tip."
- id: 819 # Bronze dart tip
  examine: "A deadly looking dart tip made of bronze - needs feathers for flight."
- id: 820 # Iron dart tip
  examine: "A deadly looking dart tip made of iron - needs feathers for flight."
- id: 821 # Steel dart tip
  examine: "A deadly-looking dart tip made of steel - needs feathers for flight."
- id: 822 # Mithril dart tip
  examine: "A deadly looking dart tip made of mithril - needs feathers for flight."
- id: 823 # Adamant dart tip
  examine: "A deadly-looking dart tip made of adamant - needs feathers for flight."
- id: 824 # Rune dart tip
  examine: "A deadly-looking dart tip made of runite - needs feathers for flight."
- id: 825 # Bronze javelin
  examine: "A bronze tipped javelin."
- id: 826 # Iron javelin
  examine: "An iron tipped javelin."
- id: 827 # Steel javelin
  examine: "A steel tipped javelin."
- id: 828 # Mithril javelin
  examine: "A mithril tipped javelin."
- id: 829 # Adamant javelin
  examine: "An adamant tipped javelin."
- id: 830 # Rune javelin
  examine: "A rune tipped javelin."
- id: 831 # Bronze javelin(p)
  examine: "A bronze tipped javelin."
- id: 832 # Iron javelin(p)
  examine: "An iron tipped javelin."
- id: 833 # Steel javelin(p)
  examine: "A steel tipped javelin."
- id: 834 # Mithril javelin(p)
  examine: "A mithril tipped javelin."
- id: 835 # Adamant javelin(p)
  examine: "An adamant tipped javelin."
- id: 836 # Rune javelin(p)
  examine: "A rune tipped javelin."
- id: 837 # Crossbow
  examine: "This fires crossbow bolts."
- id: 839 # Longbow
  examine: "A nice sturdy bow."
- id: 841 # Shortbow
  examine: "Short but effective."
- id: 843 # Oak shortbow
  examine: "A shortbow made out of oak, still effective."
- id: 845 # Oak longbow
  examine: "A nice sturdy bow made out of oak."
- id: 847 # Willow longbow
  examine: "A nice sturdy bow made out of willow."
- id: 849 # Willow shortbow
  examine: "A shortbow made out of willow, still effective."
- id: 851 # Maple longbow
  examine: "A nice sturdy bow made out of Maple."
- id: 853 # Maple shortbow
  examine: "A shortbow made out of Maple, still effective."
- id: 855 # Yew longbow
  examine: "A nice sturdy bow made out of yew."
- id: 857 # Yew shortbow
  examine: "A shortbow made out of yew, still effective."
- id: 859 # Magic longbow
  examine: "A nice sturdy magical bow."
- id: 861 # Magic shortbow
  examine: "Short and magical, but still effective."
- id: 863 # Iron knife
  examine: "A finely balanced throwing knife."
- id: 864 # Bronze knife
  examine: "A finely balanced throwing knife."
- id: 865 # Steel knife
  examine: "A finely balanced throwing knife."
- id: 866 # Mithril knife
  examine: "A finely balanced throwing knife."
- id: 867 # Adamant knife
  examine: "A finely balanced throwing knife."
- id: 868 # Rune knife
  examine: "A finely balanced throwing knife."
- id: 869 # Black knife
  examine: "A finely balanced throwing knife."
- id: 870 # Bronze knife(p)
  examine: "A finely balanced throwing knife."
- id: 871 # Iron knife(p)
  examine: "A finely balanced throwing knife."
- id: 872 # Steel knife(p)
  examine: "A finely balanced throwing knife."
- id: 873 # Mithril knife(p)
  examine: "A finely balanced throwing knife."
- id: 874 # Black knife(p)
  examine: "A finely balanced throwing knife."
- id: 875 # Adamant knife(p)
  examine: "A finely balanced throwing knife."
- id: 876 # Rune knife(p)
  examine: "A finely balanced throwing knife."
- id: 877 # Bronze bolts
  examine: "Bronze crossbow bolts."
- id: 879 # Opal bolts
  examine: "Opal tipped Bronze crossbow bolts."
- id: 880 # Pearl bolts
  examine: "Pearl tipped Iron crossbow bolts."
- id: 881 # Barbed bolts
  examine: "Great if you have a crossbow!"
- id: 882 # Bronze arrow
  examine: "Arrows with bronze heads."
- id: 883 # Bronze arrow(p)
  examine: "Venomous-looking arrows."
- id: 884 # Iron arrow
  examine: "Arrows with iron heads."
- id: 885 # Iron arrow(p)
  examine: "Venomous-looking arrows."
- id: 886 # Steel arrow
  examine: "Arrows with steel heads."
- id: 887 # Steel arrow(p)
  examine: "Venomous-looking arrows."
- id: 888 # Mithril arrow
  examine: "Arrows with mithril heads."
- id: 889 # Mithril arrow(p)
  examine: "Venomous-looking arrows."
- id: 890 # Adamant arrow
  examine: "Arrows with adamant heads."
- id: 891 # Adamant arrow(p)
  examine: "Venomous-looking arrows."
- id: 892 # Rune arrow
  examine: "Arrows with rune heads."
- id: 893 # Rune arrow(p)
  examine: "Venomous-looking arrows."
- id: 946 # Knife
  examine: "A dangerous looking knife."
- id: 948 # Bear fur
  examine: "This would make warm clothing."
- id: 950 # Silk
  examine: "It's a sheet of silk."
- id: 952 # Spade
  examine: "A slightly muddy spade."
- id: 954 # Rope
  examine: "A coil of rope."
- id: 956 # Flier
  examine: "Get your axes from Bob's Axes."
- id: 958 # Grey wolf fur
  examine: "This would make warm clothing."
- id: 960 # Plank
  examine: "A plank of wood!"
- id: 962 # Christmas cracker
  examine: "I need to pull this."
- id: 964 # Skull
  examine: "Ooooh spooky!"
- id: 966 # Tile
  examine: "A fraction of a roof."
- id: 968 # Rock
  examine: "A rock"
- id: 970 # Papyrus
  examine: "Used for making notes."
- id: 972 # Papyrus
  examine: "Used for making notes."
- id: 973 # Charcoal
  examine: "A lump of charcoal."
- id: 975 # Machete
  examine: "A jungle specific slashing device."
- id: 981 # Disk of returning
  examine: "Used to get out of Thordur's blackhole."
- id: 983 # Brass key
  examine: "Opens a door that leads into a dungeon."
- id: 989 # Crystal key
  examine: "A mysterious key for a mysterious chest."
- id: 991 # Muddy key
  examine: "It looks like the key to a chest."
- id: 993 # Sinister key
  examine: "You get a sense of dread from this key."
- id: 995 # Coins
  examine: "Lovely money!"
- id: 1005 # White apron
  examine: "A mostly clean apron."
- id: 1009 # Brass necklace
  examine: "I'd prefer a gold one."
- id: 1011 # Blue skirt
  examine: "Leg covering favoured by women and wizards."
- id: 1013 # Pink skirt
  examine: "A ladies skirt."
- id: 1015 # Black skirt
  examine: "Clothing favoured by women and dark wizards."
- id: 1017 # Wizard hat
  examine: "A silly pointed hat."
- id: 1037 # Bunny ears
  examine: "A rabbit-like adornment."
- id: 1038 # Red partyhat
  examine: "A nice hat from a cracker."
- id: 1040 # Yellow partyhat
  examine: "A nice hat from a cracker."
- id: 1042 # Blue partyhat
  examine: "A nice hat from a cracker."
- id: 1044 # Green partyhat
  examine: "A nice hat from a cracker."
- id: 1046 # Purple partyhat
  examine: "A nice hat from a cracker."
- id: 1048 # White partyhat
  examine: "A nice hat from a cracker."
- id: 1050 # Santa hat
  examine: "It's a Santa hat."
- id: 1052 # Cape of legends
  examine: "The cape worn by members of the Legends Guild."
- id: 1059 # Leather gloves
  examine: "These will keep my hands warm!"
- id: 1061 # Leather boots
  examine: "Comfortable leather boots."
- id: 1063 # Leather vambraces
  examine: "Better than no armour!"
- id: 1067 # Iron platelegs
  examine: "These look pretty heavy."
- id: 1069 # Steel platelegs
  examine: "These look pretty heavy."
- id: 1071 # Mithril platelegs
  examine: "These look pretty heavy."
- id: 1073 # Adamant platelegs
  examine: "These look pretty heavy."
- id: 1075 # Bronze platelegs
  examine: "These look pretty heavy."
- id: 1077 # Black platelegs
  examine: "Big, black and heavy looking."
- id: 1079 # Rune platelegs
  examine: "These look pretty heavy."
- id: 1081 # Iron plateskirt
  examine: "Designer leg protection."
- id: 1083 # Steel plateskirt
  examine: "Designer leg protection."
- id: 1085 # Mithril plateskirt
  examine: "Designer leg protection."
- id: 1087 # Bronze plateskirt
  examine: "Designer leg protection."
- id: 1089 # Black plateskirt
  examine: "Big, black and heavy looking."
- id: 1091 # Adamant plateskirt
  examine: "Designer leg protection."
- id: 1093 # Rune plateskirt
  examine: "Designer leg protection."
- id: 1095 # Leather chaps
  examine: "Better than no armour!"
- id: 1097 # Studded chaps
  examine: "Those studs should provide a bit more protection."
- id: 1099 # Green d'hide chaps
  examine: "Made from 100% real dragonhide."
- id: 1101 # Iron chainbody
  examine: "A series of connected metal rings."
- id: 1103 # Bronze chainbody
  examine: "A series of connected metal rings."
- id: 1105 # Steel chainbody
  examine: "A series of connected metal rings."
- id: 1107 # Black chainbody
  examine: "A series of connected metal rings."
- id: 1109 # Mithril chainbody
  examine: "A series of connected metal rings."
- id: 1111 # Adamant chainbody
  examine: "A series of connected metal rings."
- id: 1113 # Rune chainbody
  examine: "A series of connected metal rings."
- id: 1115 # Iron platebody
  examine: "Provides excellent protection."
- id: 1117 # Bronze platebody
  examine: "Provides excellent protection."
- id: 1119 # Steel platebody
  examine: "Provides excellent protection."
- id: 1121 # Mithril platebody
  examine: "Provides excellent protection."
- id: 1123 # Adamant platebody
  examine: "Provides excellent protection."
- id: 1125 # Black platebody
  examine: "Provides excellent protection."
- id: 1127 # Rune platebody
  examine: "Provides excellent protection."
- id: 1129 # Leather body
  examine: "Better than no armour!"
- id: 1131 # Hardleather body
  examine: "Harder than normal leather."
- id: 1133 # Studded body
  examine: "Those studs should provide a bit more protection."
- id: 1135 # Green d'hide body
  examine: "Made from 100% real dragonhide."
- id: 1137 # Iron med helm
  examine: "A medium sized helmet."
- id: 1139 # Bronze med helm
  examine: "A medium sized helmet."
- id: 1141 # Steel med helm
  examine: "A medium sized helmet."
- id: 1143 # Mithril med helm
  examine: "A medium sized helmet."
- id: 1145 # Adamant med helm
  examine: "A medium sized helmet."
- id: 1147 # Rune med helm
  examine: "A medium sized helmet."
- id: 1149 # Dragon med helm
  examine: "Makes the wearer pretty intimidating."
- id: 1151 # Black med helm
  examine: "A medium sized helmet."
- id: 1153 # Iron full helm
  examine: "A full face helmet."
- id: 1155 # Bronze full helm
  examine: "A full face helmet."
- id: 1157 # Steel full helm
  examine: "A full face helmet."
- id: 1159 # Mithril full helm
  examine: "A full face helmet."
- id: 1161 # Adamant full helm
  examine: "A full face helmet."
- id: 1163 # Rune full helm
  examine: "A full face helmet."
- id: 1165 # Black full helm
  examine: "A full face helmet."
- id: 1167 # Leather cowl
  examine: "Better than no armour!"
- id: 1169 # Coif
  examine: "Light weight head protection."
- id: 1171 # Wooden shield
  examine: "A solid wooden shield."
- id: 1173 # Bronze sq shield
  examine: "A medium square shield."
- id: 1175 # Iron sq shield
  examine: "A medium square shield."
- id: 1177 # Steel sq shield
  examine: "A medium square shield."
- id: 1179 # Black sq shield
  examine: "A medium square shield."
- id: 1181 # Mithril sq shield
  examine: "A medium square shield."
- id: 1183 # Adamant sq shield
  examine: "A medium square shield."
- id: 1185 # Rune sq shield
  examine: "A medium square shield."
- id: 1187 # Dragon sq shield
  examine: "An ancient and powerful looking Dragon Square shield."
- id: 1189 # Bronze kiteshield
  examine: "A large metal shield."
- id: 1191 # Iron kiteshield
  examine: "A large metal shield."
- id: 1193 # Steel kiteshield
  examine: "A large metal shield."
- id: 1195 # Black kiteshield
  examine: "A large metal shield."
- id: 1197 # Mithril kiteshield
  examine: "A large metal shield."
- id: 1199 # Adamant kiteshield
  examine: "A large metal shield."
- id: 1201 # Rune kiteshield
  examine: "A large metal shield."
- id: 1203 # Iron dagger
  examine: "Short but pointy."
- id: 1205 # Bronze dagger
  examine: "Short but pointy."
- id: 1207 # Steel dagger
  examine: "Short but pointy."
- id: 1209 # Mithril dagger
  examine: "A dangerous dagger."
- id: 1211 # Adamant dagger
  examine: "Short and deadly."
- id: 1213 # Rune dagger
  examine: "A powerful dagger."
- id: 1215 # Dragon dagger
  examine: "A powerful dagger."
- id: 1217 # Black dagger
  examine: "A vicious black dagger."
- id: 1219 # Iron dagger(p)
  examine: "The blade is covered with poison."
- id: 1221 # Bronze dagger(p)
  examine: "This dagger is poisoned."
- id: 1223 # Steel dagger(p)
  examine: "The blade has been poisoned."
- id: 1225 # Mithril dagger(p)
  examine: "A poisoned Mithril dagger."
- id: 1227 # Adamant dagger(p)
  examine: "A very dangerous poisoned dagger."
- id: 1229 # Rune dagger(p)
  examine: "The blade is covered with a nasty poison."
- id: 1231 # Dragon dagger(p)
  examine: "A powerful dagger."
- id: 1233 # Black dagger(p)
  examine: "This dagger is poisoned."
- id: 1237 # Bronze spear
  examine: "A bronze tipped spear."
- id: 1239 # Iron spear
  examine: "An iron tipped spear."
- id: 1241 # Steel spear
  examine: "A steel tipped spear."
- id: 1243 # Mithril spear
  examine: "A mithril tipped spear."
- id: 1245 # Adamant spear
  examine: "An adamantite tipped spear."
- id: 1247 # Rune spear
  examine: "A rune tipped spear."
- id: 1249 # Dragon spear
  examine: "A dragon tipped spear."
- id: 1251 # Bronze spear(p)
  examine: "A poisoned bronze tipped spear."
- id: 1253 # Iron spear(p)
  examine: "A poisoned iron tipped spear."
- id: 1255 # Steel spear(p)
  examine: "A poisoned steel tipped spear."
- id: 1257 # Mithril spear(p)
  examine: "A poisoned mithril tipped spear."
- id: 1259 # Adamant spear(p)
  examine: "A poisoned adamantite tipped spear."
- id: 1261 # Rune spear(p)
  examine: "A poisoned rune tipped spear."
- id: 1263 # Dragon spear(p)
  examine: "A poisoned dragon tipped spear."
- id: 1265 # Bronze pickaxe
  examine: "Used for mining."
- id: 1267 # Iron pickaxe
  examine: "Used for mining."
- id: 1269 # Steel pickaxe
  examine: "Used for mining."
- id: 1271 # Adamant pickaxe
  examine: "Used for mining."
- id: 1273 # Mithril pickaxe
  examine: "Used for mining."
- id: 1275 # Rune pickaxe
  examine: "Used for mining."
- id: 1277 # Bronze sword
  examine: "A razor sharp sword."
- id: 1279 # Iron sword
  examine: "A razor sharp sword."
- id: 1281 # Steel sword
  examine: "A razor sharp sword."
- id: 1283 # Black sword
  examine: "A razor sharp sword."
- id: 1285 # Mithril sword
  examine: "A razor sharp sword."
- id: 1287 # Adamant sword
  examine: "A razor sharp sword."
- id: 1289 # Rune sword
  examine: "A razor sharp sword."
- id: 1291 # Bronze longsword
  examine: "A razor sharp longsword."
- id: 1293 # Iron longsword
  examine: "A razor sharp longsword."
- id: 1295 # Steel longsword
  examine: "A razor sharp longsword."
- id: 1297 # Black longsword
  examine: "A razor sharp longsword."
- id: 1299 # Mithril longsword
  examine: "A razor sharp longsword."
- id: 1301 # Adamant longsword
  examine: "A razor sharp longsword."
- id: 1303 # Rune longsword
  examine: "A razor sharp longsword."
- id: 1305 # Dragon longsword
  examine: "A very powerful sword."
- id: 1307 # Bronze 2h sword
  examine: "A two handed sword."
- id: 1309 # Iron 2h sword
  examine: "A two handed sword."
- id: 1311 # Steel 2h sword
  examine: "A two handed sword."
- id: 1313 # Black 2h sword
  examine: "A two handed sword."
- id: 1315 # Mithril 2h sword
  examine: "A two handed sword."
- id: 1317 # Adamant 2h sword
  examine: "A two handed sword."
- id: 1319 # Rune 2h sword
  examine: "A two handed sword."
- id: 1321 # Bronze scimitar
  examine: "A vicious, curved sword."
- id: 1323 # Iron scimitar
  examine: "A vicious, curved sword."
- id: 1325 # Steel scimitar
  examine: "A vicious, curved sword."
- id: 1327 # Black scimitar
  examine: "A vicious, curved sword."
- id: 1329 # Mithril scimitar
  examine: "A vicious, curved sword."
- id: 1331 # Adamant scimitar
  examine: "A vicious, curved sword."
- id: 1333 # Rune scimitar
  examine: "A vicious, curved sword."
- id: 1335 # Iron warhammer
  examine: "I don't think it's intended for joinery."
- id: 1337 # Bronze warhammer
  examine: "I don't think it's intended for joinery."
- id: 1339 # Steel warhammer
  examine: "I don't think it's intended for joinery."
- id: 1341 # Black warhammer
  examine: "I don't think it's intended for joinery."
- id: 1343 # Mithril warhammer
  examine: "I don't think it's intended for joinery."
- id: 1347 # Rune warhammer
  examine: "I don't think it's intended for joinery."
- id: 1349 # Iron axe
  examine: "A woodcutter's axe."
- id: 1351 # Bronze axe
  examine: "A woodcutter's axe."
- id: 1353 # Steel axe
  examine: "A woodcutter's axe."
- id: 1355 # Mithril axe
  examine: "A powerful axe."
- id: 1357 # Adamant axe
  examine: "A powerful axe."
- id: 1359 # Rune axe
  examine: "A powerful axe."
- id: 1361 # Black axe
  examine: "A sinister looking axe."
- id: 1363 # Iron battleaxe
  examine: "A vicious looking axe."
- id: 1365 # Steel battleaxe
  examine: "A vicious looking axe."
- id: 1367 # Black battleaxe
  examine: "A vicious looking axe."
- id: 1369 # Mithril battleaxe
  examine: "A vicious looking axe."
- id: 1371 # Adamant battleaxe
  examine: "A vicious looking axe."
- id: 1373 # Rune battleaxe
  examine: "A vicious looking axe."
- id: 1375 # Bronze battleaxe
  examine: "A vicious looking axe."
- id: 1377 # Dragon battleaxe
  examine: "A vicious looking axe."
- id: 1379 # Staff
  examine: "It's a slightly magical stick."
- id: 1381 # Staff of air
  examine: "A Magical staff."
- id: 1383 # Staff of water
  examine: "A Magical staff."
- id: 1385 # Staff of earth
  examine: "A Magical staff."
- id: 1387 # Staff of fire
  examine: "A Magical staff."
- id: 1389 # Magic staff
  examine: "A Magical staff."
- id: 1391 # Battlestaff
  examine: "It's a slightly magical stick."
- id: 1393 # Fire battlestaff
  examine: "It's a slightly magical stick."
- id: 1395 # Water battlestaff
  examine: "It's a slightly magical stick."
- id: 1397 # Air battlestaff
  examine: "It's a slightly magical stick."
- id: 1399 # Earth battlestaff
  examine: "It's a slightly magical stick."
- id: 1401 # Mystic fire staff
  examine: "It's a slightly magical stick."
- id: 1403 # Mystic water staff
  examine: "It's a slightly magical stick."
- id: 1405 # Mystic air staff
  examine: "It's a slightly magical stick."
- id: 1407 # Mystic earth staff
  examine: "It's a slightly magical stick."
- id: 1409 # Iban's staff
  examine: "An ancient staff, formerly the property of Iban."
- id: 1410 # Iban's staff
  examine: "I'll need to get this repaired before I can use it."
- id: 1419 # Scythe
  examine: "It's a Scythe."
- id: 1420 # Iron mace
  examine: "A spiky mace."
- id: 1422 # Bronze mace
  examine: "A spiky mace."
- id: 1424 # Steel mace
  examine: "A spiky mace."
- id: 1426 # Black mace
  examine: "A spiky mace."
- id: 1428 # Mithril mace
  examine: "A spiky mace."
- id: 1430 # Adamant mace
  examine: "A spiky mace."
- id: 1432 # Rune mace
  examine: "A spiky mace."
- id: 1434 # Dragon mace
  examine: "A spiky mace."
- id: 1436 # Rune essence
  examine: "An uncharged Rune Stone."
- id: 1438 # Air talisman
  examine: "A mysterious power emanates from the talisman..."
- id: 1440 # Earth talisman
  examine: "A mysterious power emanates from the talisman..."
- id: 1442 # Fire talisman
  examine: "A mysterious power emanates from the talisman..."
- id: 1444 # Water talisman
  examine: "A mysterious power emanates from the talisman..."
- id: 1446 # Body talisman
  examine: "A mysterious power emanates from the talisman..."
- id: 1448 # Mind talisman
  examine: "A mysterious power emanates from the talisman..."
- id: 1452 # Chaos talisman
  examine: "A mysterious power emanates from the talisman..."
- id: 1454 # Cosmic talisman
  examine: "A mysterious power emanates from the talisman..."
- id: 1456 # Death talisman
  examine: "A mysterious power emanates from the talisman..."
- id: 1458 # Law talisman
  examine: "A mysterious power emanates from the talisman..."
- id: 1462 # Nature talisman
  examine: "A mysterious power emanates from the talisman..."
- id: 1464 # Archery ticket
  examine: "I can exchange this for equipment."
- id: 1465 # Weapon poison
  examine: "For use on daggers and projectiles."
- id: 1466 # Sea slug
  examine: "A rather nasty looking crustacean."
- id: 1467 # Damp sticks
  examine: "Some damp wooden sticks."
- id: 1468 # Dry sticks
  examine: "Some dry wooden sticks."
- id: 1469 # Broken glass
  examine: "Smashed glass."
- id: 1470 # Red bead
  examine: "A small round red bead."
- id: 1472 # Yellow bead
  examine: "A small round yellow bead."
- id: 1474 # Black bead
  examine: "A small round black bead."
- id: 1476 # White bead
  examine: "A small round white bead."
- id: 1478 # Amulet of accuracy
  examine: "It increases my aim."
- id: 1480 # Rock
  examine: "A chunk of rock."
- id: 1481 # Orb of light
  examine: "A magical sphere that glimmers within."
- id: 1482 # Orb of light
  examine: "A magical sphere that glimmers within."
- id: 1483 # Orb of light
  examine: "A magical sphere that glimmers within."
- id: 1484 # Orb of light
  examine: "A magical sphere that glimmers within."
- id: 1486 # Piece of railing
  examine: "A broken piece of railing."
- id: 1487 # Unicorn horn
  examine: "A withered unicorn horn."
- id: 1488 # Paladin's badge
  examine: "A coat of arms of the Ardougne Paladins."
- id: 1489 # Paladin's badge
  examine: "A coat of arms of the Ardougne Paladins."
- id: 1490 # Paladin's badge
  examine: "A coat of arms of the Ardougne Paladins."
- id: 1491 # Witch's cat
  examine: "A cat."
- id: 1492 # Doll of iban
  examine: "A simple doll with Iban's likeness."
- id: 1493 # Old journal
  examine: "An account of the last times of someone."
- id: 1494 # History of iban
  examine: "The tale of Iban."
- id: 1495 # Klank's gauntlets
  examine: "Strong dwarvish gloves."
- id: 1496 # Iban's dove
  examine: "I thought you only saw these in pairs?"
- id: 1497 # Amulet of othanian
  examine: "A mystical demonic amulet."
- id: 1498 # Amulet of doomion
  examine: "A mystical demonic amulet."
- id: 1499 # Amulet of holthion
  examine: "A mystical demonic amulet."
- id: 1500 # Iban's shadow
  examine: "A strange dark liquid."
- id: 1501 # Dwarf brew
  examine: "Smells stronger than most spirits."
- id: 1502 # Iban's ashes
  examine: "The burnt remains of Iban."
- id: 1503 # Warrant
  examine: "A search warrant for a house in Ardougne."
- id: 1504 # Hangover cure
  examine: "It doesn't look very tasty."
- id: 1506 # Gas mask
  examine: "Stops me from breathing nasty stuff!"
- id: 1507 # A small key
  examine: "Quite a small key."
- id: 1508 # A scruffy note
  examine: "It seems to say \"hongorer lure\"..."
- id: 1509 # Book
  examine: "Turnip growing for beginners."
- id: 1510 # Picture
  examine: "A picture of a lady called Elena."
- id: 1511 # Logs
  examine: "A number of wooden logs."
- id: 1513 # Magic logs
  examine: "Logs cut from a magic tree."
- id: 1515 # Yew logs
  examine: "Logs cut from a yew tree."
- id: 1517 # Maple logs
  examine: "Logs cut from a maple tree."
- id: 1519 # Willow logs
  examine: "Logs cut from a willow tree."
- id: 1521 # Oak logs
  examine: "Logs cut from an oak tree."
- id: 1523 # Lockpick
  examine: "For picking tough locks."
- id: 1526 # Snake weed
  examine: "This herb is Snake Weed."
- id: 1528 # Ardrigal
  examine: "This herb is Ardrigal."
- id: 1530 # Sito foil
  examine: "This herb is Sito Foil."
- id: 1532 # Volencia moss
  examine: "This herb is Volencia Moss."
- id: 1534 # Rogue's purse
  examine: "This herb is Rogue's Purse."
- id: 1535 # Map part
  examine: "A piece of the map to Crandor."
- id: 1536 # Map part
  examine: "A piece of the map to Crandor."
- id: 1537 # Map part
  examine: "A piece of the map to Crandor."
- id: 1538 # Crandor map
  examine: "A map of the route to Crandor."
- id: 1539 # Steel nails
  examine: "Keeps things in place fairly permanently."
- id: 1540 # Anti-dragon shield
  examine: "This provides partial protection from dragonbreath attacks."
- id: 1542 # Maze key
  examine: "A key to Melzar's Maze."
- id: 1543 # Key
  examine: "A red key from Melzar's Maze."
- id: 1544 # Key
  examine: "An orange key from Melzar's Maze."
- id: 1545 # Key
  examine: "A yellow key from Melzar's Maze."
- id: 1546 # Key
  examine: "A blue key from Melzar's Maze."
- id: 1547 # Key
  examine: "A magenta key from Melzar's Maze."
- id: 1548 # Key
  examine: "A green key from Melzar's Maze."
- id: 1549 # Stake
  examine: "A very pointy stick."
- id: 1550 # Garlic
  examine: "A clove of garlic."
- id: 1552 # Seasoned sardine
  examine: "Sardine flavoured with doogle leaves."
- id: 1554 # Fluffs' kitten
  examine: "It looks like it's lost."
- id: 1555 # Pet kitten
  examine: "This kitten seems to like you."
- id: 1556 # Pet kitten
  examine: "This kitten seems to like you."
- id: 1557 # Pet kitten
  examine: "This kitten seems to like you."
- id: 1558 # Pet kitten
  examine: "This kitten seems to like you."
- id: 1559 # Pet kitten
  examine: "This kitten seems to like you."
- id: 1560 # Pet kitten
  examine: "This kitten seems to like you."
- id: 1561 # Pet cat
  examine: "This cat definitely likes you."
- id: 1562 # Pet cat
  examine: "This cat definitely likes you."
- id: 1563 # Pet cat
  examine: "This cat definitely likes you."
- id: 1564 # Pet cat
  examine: "This cat definitely likes you."
- id: 1565 # Pet cat
  examine: "This cat definitely likes you."
- id: 1566 # Pet cat
  examine: "This cat definitely likes you."
- id: 1567 # Pet cat
  examine: "This cat is so well fed it can hardly move."
- id: 1568 # Pet cat
  examine: "This cat is so well fed it can hardly move."
- id: 1569 # Pet cat
  examine: "This cat is so well fed it can hardly move."
- id: 1570 # Pet cat
  examine: "This cat is so well fed it can hardly move."
- id: 1571 # Pet cat
  examine: "This cat is so well fed it can hardly move."
- id: 1572 # Pet cat
  examine: "This cat is so well fed it can hardly move."
- id: 1573 # Doogle leaves
  examine: "A tasty herb, good for seasoning."
- id: 1575 # Cat training medal
  examine: "For feline training expertise."
- id: 1577 # Pete's candlestick
  examine: "Scarface Pete's Candlestick."
- id: 1579 # Thieves' armband
  examine: "This denotes a Master Thief."
- id: 1580 # Ice gloves
  examine: "These will keep my hands cold!"
- id: 1581 # Blamish snail slime
  examine: "Yuck."
- id: 1582 # Blamish oil
  examine: "Made from the finest snail slime."
- id: 1583 # Fire feather
  examine: "Firebird feather."
- id: 1584 # Id papers
  examine: "Apparently my name is Hartigen."
- id: 1585 # Oily fishing rod
  examine: "Useful for catching lava eels."
- id: 1586 # Miscellaneous key
  examine: "I wonder what this unlocks?."
- id: 1590 # Dusty key
  examine: "Never let your home get like this."
- id: 1591 # Jail key
  examine: "Key to a cell."
- id: 1592 # Ring mould
  examine: "Used to make gold rings."
- id: 1594 # Unholy mould
  examine: "Used to make unholy symbols."
- id: 1595 # Amulet mould
  examine: "Used to make gold amulets."
- id: 1597 # Necklace mould
  examine: "Used to make gold necklaces."
- id: 1599 # Holy mould
  examine: "Used to make holy symbols of Saradomin."
- id: 1601 # Diamond
  examine: "This looks valuable."
- id: 1603 # Ruby
  examine: "This looks valuable."
- id: 1605 # Emerald
  examine: "This looks valuable."
- id: 1607 # Sapphire
  examine: "This looks valuable."
- id: 1609 # Opal
  examine: "A semi precious stone."
- id: 1611 # Jade
  examine: "A semi precious stone."
- id: 1613 # Red topaz
  examine: "A semi precious stone."
- id: 1615 # Dragonstone
  examine: "This looks valuable."
- id: 1617 # Uncut diamond
  examine: "This would be worth more cut."
- id: 1619 # Uncut ruby
  examine: "This would be worth more cut."
- id: 1621 # Uncut emerald
  examine: "This would be worth more cut."
- id: 1623 # Uncut sapphire
  examine: "This would be worth more cut."
- id: 1625 # Uncut opal
  examine: "This would be worth more cut."
- id: 1627 # Uncut jade
  examine: "This would be worth more cut."
- id: 1629 # Uncut red topaz
  examine: "This would be worth more cut."
- id: 1631 # Uncut dragonstone
  examine: "This would be worth more cut."
- id: 1635 # Gold ring
  examine: "A valuable ring."
- id: 1637 # Sapphire ring
  examine: "A valuable ring."
- id: 1639 # Emerald ring
  examine: "A valuable ring."
- id: 1641 # Ruby ring
  examine: "A valuable ring."
- id: 1643 # Diamond ring
  examine: "A valuable ring."
- id: 1645 # Dragonstone ring
  examine: "A valuable ring."
- id: 1654 # Gold necklace
  examine: "I wonder if this is valuable."
- id: 1656 # Sapphire necklace
  examine: "I wonder if this is valuable."
- id: 1658 # Emerald necklace
  examine: "I wonder if this is valuable."
- id: 1660 # Ruby necklace
  examine: "I wonder if this is valuable."
- id: 1662 # Diamond necklace
  examine: "I wonder if this is valuable."
- id: 1664 # Dragon necklace
  examine: "I wonder if this is valuable."
- id: 1692 # Gold amulet
  examine: "A plain gold amulet."
- id: 1694 # Sapphire amulet
  examine: "I wonder if I can get this enchanted."
- id: 1696 # Emerald amulet
  examine: "I wonder if I can get this enchanted."
- id: 1698 # Ruby amulet
  examine: "I wonder if I can get this enchanted."
- id: 1700 # Diamond amulet
  examine: "I wonder if I can get this enchanted."
- id: 1704 # Amulet of glory
  examine: "A very powerful dragonstone amulet."
- id: 1706 # Amulet of glory(1)
  examine: "A dragonstone amulet with 1 magic charge."
- id: 1708 # Amulet of glory(2)
  examine: "A dragonstone amulet with 2 magic charges."
- id: 1710 # Amulet of glory(3)
  examine: "A dragonstone amulet with 3 magic charges."
- id: 1712 # Amulet of glory(4)
  examine: "A dragonstone amulet with 4 magic charges."
- id: 1714 # Unstrung symbol
  examine: "It needs a string so I can wear it."
- id: 1716 # Unblessed symbol
  examine: "A symbol of Saradomin."
- id: 1718 # Holy symbol
  examine: "A blessed holy symbol of Saradomin."
- id: 1720 # Unstrung emblem
  examine: "It needs a string so I can wear it."
- id: 1722 # Unpowered symbol
  examine: "An unblessed symbol of Zamorak."
- id: 1724 # Unholy symbol
  examine: "An unholy symbol of Zamorak."
- id: 1725 # Amulet of strength
  examine: "An enchanted ruby amulet."
- id: 1727 # Amulet of magic
  examine: "An enchanted sapphire amulet of magic."
- id: 1729 # Amulet of defence
  examine: "An enchanted emerald amulet of protection."
- id: 1731 # Amulet of power
  examine: "An enchanted diamond amulet of power."
- id: 1733 # Needle
  examine: "Used with a thread to make clothes."
- id: 1734 # Thread
  examine: "Used with a needle to make clothes."
- id: 1735 # Shears
  examine: "For shearing sheep."
- id: 1737 # Wool
  examine: "I think this came from a sheep."
- id: 1739 # Cowhide
  examine: "I should take this to the tannery."
- id: 1741 # Leather
  examine: "It's a piece of leather."
- id: 1743 # Hard leather
  examine: "It's a piece of hard leather."
- id: 1747 # Black dragonhide
  examine: "The scaly rough hide from a Black Dragon."
- id: 1749 # Red dragonhide
  examine: "The scaly rough hide from a Red Dragon."
- id: 1751 # Blue dragonhide
  examine: "The scaly rough hide from a Blue Dragon."
- id: 1753 # Green dragonhide
  examine: "The scaly rough hide from a Green Dragon."
- id: 1755 # Chisel
  examine: "Good for detailed Crafting."
- id: 1757 # Brown apron
  examine: "A mostly clean apron."
- id: 1759 # Ball of wool
  examine: "Spun from sheeps' wool."
- id: 1761 # Soft clay
  examine: "Clay soft enough to mould."
- id: 1763 # Red dye
  examine: "A little bottle of red dye."
- id: 1765 # Yellow dye
  examine: "A little bottle of yellow dye."
- id: 1767 # Blue dye
  examine: "A little bottle of blue dye."
- id: 1769 # Orange dye
  examine: "A little bottle of orange dye."
- id: 1771 # Green dye
  examine: "A little bottle of green dye."
- id: 1773 # Purple dye
  examine: "A little bottle of purple dye."
- id: 1775 # Molten glass
  examine: "Hot glass ready to be blown into useful objects."
- id: 1777 # Bow string
  examine: "I need a bow stave to attach this to."
- id: 1779 # Flax
  examine: "I should use this with a spinning wheel."
- id: 1781 # Soda ash
  examine: "One of the ingredients for making glass."
- id: 1783 # Bucket of sand
  examine: "One of the ingredients for making glass."
- id: 1785 # Glassblowing pipe
  examine: "Used to form molten glass into useful items."
- id: 1787 # Unfired pot
  examine: "I need to put this in a pottery oven."
- id: 1789 # Unfired pie dish
  examine: "I need to put this in a pottery oven."
- id: 1791 # Unfired bowl
  examine: "I need to put this in a pottery oven."
- id: 1793 # Woad leaf
  examine: "A slightly bluish leaf."
- id: 1794 # Bronze wire
  examine: "Useful for Crafting items."
- id: 1796 # Silver necklace
  examine: "Anna's shiny silver coated necklace."
- id: 1797 # Silver necklace
  examine: "Anna's shiny silver coated necklace coated with a thin layer of flour."
- id: 1798 # Silver cup
  examine: "Bob's shiny silver coated tea cup."
- id: 1799 # Silver cup
  examine: "Bob's shiny silver coated tea cup coated with a thin layer of flour."
- id: 1800 # Silver bottle
  examine: "Carol's shiny silver coated bottle."
- id: 1801 # Silver bottle
  examine: "Carol's shiny silver coated bottle coated with a thin layer of flour."
- id: 1802 # Silver book
  examine: "David's shiny silver coated book."
- id: 1803 # Silver book
  examine: "David's shiny silver coated book coated with a thin layer of flour."
- id: 1804 # Silver needle
  examine: "Elizabeth's shiny silver coated needle."
- id: 1805 # Silver needle
  examine: "Elizabeth's shiny silver coated needle coated with a thin layer of flour."
- id: 1806 # Silver pot
  examine: "Frank's shiny silver coated pot."
- id: 1807 # Silver pot
  examine: "Frank's shiny silver coated pot coated with a thin layer of flour."
- id: 1808 # Criminal's thread
  examine: "Some red thread found at the murder scene."
- id: 1809 # Criminal's thread
  examine: "Some green thread found at the murder scene."
- id: 1810 # Criminal's thread
  examine: "Some blue thread found at the murder scene."
- id: 1811 # Flypaper
  examine: "A piece of fly paper. It's sticky."
- id: 1812 # Pungent pot
  examine: "A pot found at the murder scene, with a sickly odour."
- id: 1813 # Criminal's dagger
  examine: "A flimsy-looking dagger found at the crime scene."
- id: 1814 # Criminal's dagger
  examine: "A flimsy-looking dagger found at the crime scene coated with a thin layer of flour."
- id: 1815 # Killer's print
  examine: "The fingerprints of the murderer."
- id: 1816 # Anna's print
  examine: "An imprint of Anna's fingerprint."
- id: 1817 # Bob's print
  examine: "An imprint of Bob's fingerprint."
- id: 1818 # Carol's print
  examine: "An imprint of Carol's fingerprint."
- id: 1819 # David's print
  examine: "An imprint of David's fingerprint."
- id: 1820 # Elizabeth's print
  examine: "An imprint of Elizabeth's fingerprint."
- id: 1821 # Frank's print
  examine: "An imprint of Frank's fingerprint."
- id: 1822 # Unknown print
  examine: "An unidentified fingerprint taken from the murder weapon."
- id: 1823 # Waterskin(4)
  examine: "A full waterskin with four portions of water."
- id: 1825 # Waterskin(3)
  examine: "A nearly full waterskin with three portions of water."
- id: 1827 # Waterskin(2)
  examine: "A half empty waterskin with two portions of water."
- id: 1829 # Waterskin(1)
  examine: "A nearly empty waterskin with one portion of water."
- id: 1831 # Waterskin(0)
  examine: "A completely empty waterskin - you'll need to fill it up."
- id: 1833 # Desert shirt
  examine: "A cool, light desert shirt."
- id: 1835 # Desert robe
  examine: "A cool, light desert robe."
- id: 1837 # Desert boots
  examine: "Comfortable desert shoes."
- id: 1839 # Metal key
  examine: "This key is crudely made. It came from the mining camp Mercenary Captain."
- id: 1840 # Cell door key
  examine: "A metallic key, usually used by prison guards."
- id: 1841 # Barrel
  examine: "An empty mining barrel."
- id: 1842 # Ana in a barrel
  examine: "A mining barrel with Ana in it."
- id: 1843 # Wrought iron key
  examine: "This key unlocks a very sturdy gate of some sort. Ana gave me this key."
- id: 1844 # Slave shirt
  examine: "A filthy, smelly, flea infested shirt."
- id: 1845 # Slave robe
  examine: "A filthy, smelly, flea infested robe."
- id: 1846 # Slave boots
  examine: "A set of filthy, smelly, flea infested desert slave boots."
- id: 1847 # Scrumpled paper
  examine: "A piece of paper with barely legible writing - looks like a recipe!"
- id: 1849 # Prototype dart
  examine: "A prototype throwing dart."
- id: 1850 # Technical plans
  examine: "Plans of a technical nature."
- id: 1851 # Tenti pineapple
  examine: "The most delicious of pineapples."
- id: 1852 # Bedabin key
  examine: "A key to the chest in Captain Siad's room."
- id: 1853 # Prototype dart tip
  examine: "A prototype dart tip - it looks deadly."
- id: 1854 # Shantay pass
  examine: "Allows you to pass through the Shantay pass into the Kharid Desert."
- id: 1855 # Rock
  examine: "Looks like a plain rock, must have some ore in it?"
- id: 1856 # Guide book
  examine: "A Tourist's Guide To Ardougne."
- id: 1857 # Totem
  examine: "The Rantuki tribe's totem."
- id: 1858 # Address label
  examine: "It says 'To Lord Handelmort, Handelmort Mansion'."
- id: 1859 # Raw ugthanki meat
  examine: "I need to cook this first."
- id: 1861 # Ugthanki meat
  examine: "Freshly cooked ugthanki meat."
- id: 1863 # Pitta dough
  examine: "I need to cook this."
- id: 1865 # Pitta bread
  examine: "Nicely baked pitta bread. Needs more ingredients to make a kebab."
- id: 1869 # Chopped tomato
  examine: "A mixture of tomatoes in a bowl."
- id: 1871 # Chopped onion
  examine: "A mixture of onions in a bowl."
- id: 1873 # Chopped ugthanki
  examine: "Strips of ugthanki meat in a bowl."
- id: 1875 # Onion & tomato
  examine: "A mixture of chopped onions and tomatoes in a bowl."
- id: 1877 # Ugthanki & onion
  examine: "A mixture of chopped onions and ugthanki meat in a bowl."
- id: 1879 # Ugthanki & tomato
  examine: "A mixture of chopped tomatoes and ugthanki meat in a bowl."
- id: 1881 # Kebab mix
  examine: "A mixture of chopped tomatoes, onions and ugthanki meat in a bowl."
- id: 1883 # Ugthanki kebab
  examine: "A strange smelling kebab made from ugthanki meat."
- id: 1885 # Ugthanki kebab
  examine: "A fresh kebab made from ugthanki meat."
- id: 1887 # Cake tin
  examine: "Useful for baking cakes."
- id: 1889 # Uncooked cake
  examine: "Now all I need to do is cook it."
- id: 1891 # Cake
  examine: "A plain sponge cake."
- id: 1893 # 2/3 cake
  examine: "Someone has eaten a big chunk of this cake."
- id: 1895 # Slice of cake
  examine: "I'd rather have a whole cake."
- id: 1897 # Chocolate cake
  examine: "This looks very tasty."
- id: 1899 # 2/3 chocolate cake
  examine: "Someone has eaten a big chunk of this cake."
- id: 1901 # Chocolate slice
  examine: "I'd rather have a whole cake."
- id: 1903 # Burnt cake
  examine: "Argh what a mess!"
- id: 1905 # Asgarnian ale
  examine: "Probably the finest ale in Asgarnia."
- id: 1907 # Wizard's mind bomb
  examine: "It's got strange bubbles in it."
- id: 1909 # Greenman's ale
  examine: "A glass of frothy ale."
- id: 1911 # Dragon bitter
  examine: "A glass of bitter."
- id: 1913 # Dwarven stout
  examine: "A pint of thick dark beer."
- id: 1915 # Grog
  examine: "A murky glass of some sort of drink."
- id: 1917 # Beer
  examine: "A glass of frothy ale."
- id: 1919 # Beer glass
  examine: "I need to fill this with beer."
- id: 1921 # Bowl of water
  examine: "It's a bowl of water."
- id: 1923 # Bowl
  examine: "Useful for mixing things."
- id: 1925 # Bucket
  examine: "It's a wooden bucket."
- id: 1927 # Bucket of milk
  examine: "It's a bucket of milk."
- id: 1929 # Bucket of water
  examine: "It's a bucket of water."
- id: 1931 # Pot
  examine: "This pot is empty."
- id: 1933 # Pot of flour
  examine: "There is flour in this pot."
- id: 1935 # Jug
  examine: "This jug is empty."
- id: 1937 # Jug of water
  examine: "It's full of water."
- id: 1939 # Swamp tar
  examine: "A foul smelling thick tar-like substance."
- id: 1940 # Raw swamp paste
  examine: "A thick tar-like substance mixed with flour."
- id: 1941 # Swamp paste
  examine: "A tar-like substance mixed with flour and warmed."
- id: 1942 # Potato
  examine: "This could be used to make a good stew."
- id: 1944 # Egg
  examine: "A nice fresh egg."
- id: 1947 # Grain
  examine: "Some wheat heads."
- id: 1949 # Chef's hat
  examine: "What a silly hat."
- id: 1951 # Redberries
  examine: "Very bright red berries."
- id: 1953 # Pastry dough
  examine: "Potentially pastry."
- id: 1955 # Cooking apple
  examine: "Keeps the doctor away."
- id: 1957 # Onion
  examine: "A strong smelling onion."
- id: 1959 # Pumpkin
  examine: "Happy Halloween."
- id: 1961 # Easter egg
  examine: "Happy Easter."
- id: 1963 # Banana
  examine: "Mmm this looks tasty."
- id: 1965 # Cabbage
  examine: "Yuck I don't like cabbage."
- id: 1967 # Cabbage
  examine: "Yuck I don't like cabbage."
- id: 1969 # Spinach roll
  examine: "A home made spinach thing."
- id: 1971 # Kebab
  examine: "A meaty kebab."
- id: 1973 # Chocolate bar
  examine: "Mmmmmmm chocolate."
- id: 1975 # Chocolate dust
  examine: "It's ground up chocolate."
- id: 1977 # Chocolatey milk
  examine: "Milk with chocolate in it."
- id: 1978 # Cup of tea
  examine: "A nice cup of tea."
- id: 1980 # Empty cup
  examine: "An empty cup."
- id: 1982 # Tomato
  examine: "This would make good ketchup."
- id: 1984 # Rotten apple
  examine: "Rotten to the core!"
- id: 1985 # Cheese
  examine: "It's got holes in it."
- id: 1987 # Grapes
  examine: "Good grapes for wine making."
- id: 1989 # Half full wine jug
  examine: "An optimist would say it's half full."
- id: 1991 # Jug of bad wine
  examine: "Oh dear, this wine is terrible!"
- id: 1993 # Jug of wine
  examine: "It's full of wine."
- id: 1995 # Unfermented wine
  examine: "This wine needs to ferment before it can be drunk."
- id: 1997 # Incomplete stew
  examine: "I need to add some meat too."
- id: 1999 # Incomplete stew
  examine: "I need to add some potato too."
- id: 2001 # Uncooked stew
  examine: "I need to cook this."
- id: 2003 # Stew
  examine: "It's a meat and potato stew."
- id: 2005 # Burnt stew
  examine: "Eew, it's horribly burnt."
- id: 2007 # Spice
  examine: "This could liven up an otherwise bland stew."
- id: 2009 # Uncooked curry
  examine: "I need to cook this."
- id: 2011 # Curry
  examine: "It's a spicy hot curry."
- id: 2013 # Burnt curry
  examine: "Eew, it's horribly burnt."
- id: 2015 # Vodka
  examine: "An absolutely clear spirit."
- id: 2017 # Whisky
  examine: "A bottle of Draynor Malt."
- id: 2019 # Gin
  examine: "A strong spirit that tastes of Juniper."
- id: 2021 # Brandy
  examine: "A strong spirit best served in a large glass."
- id: 2023 # Cocktail guide
  examine: "A book on tree gnome cocktails."
- id: 2025 # Cocktail shaker
  examine: "Used for mixing cocktails."
- id: 2026 # Cocktail glass
  examine: "For sipping cocktails."
- id: 2030 # Premade choc s'dy
  examine: "A premade Chocolate Saturday."
- id: 2032 # Premade dr' dragon
  examine: "A premade Drunk Dragon."
- id: 2034 # Premade fr' blast
  examine: "A premade Fruit Blast."
- id: 2036 # Premade p' punch
  examine: "A premade Pineapple punch."
- id: 2038 # Premade sgg
  examine: "A premade Short Green Guy."
- id: 2040 # Premade wiz blz'd
  examine: "A Premade Wizard Blizzard."
- id: 2048 # Pineapple punch
  examine: "A fresh healthy fruit mix."
- id: 2054 # Wizard blizzard
  examine: "This looks like a strange mix."
- id: 2064 # Blurberry special
  examine: "Looks good... smells strong."
- id: 2074 # Choc saturday
  examine: "A warm creamy alcoholic beverage."
- id: 2080 # Short green guy
  examine: "A Short Green Guy... looks good."
- id: 2084 # Fruit blast
  examine: "A cool refreshing fruit mix."
- id: 2092 # Drunk dragon
  examine: "A warm creamy 
Download .txt
gitextract__j1tb7oh/

├── .dockerignore
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug-report.md
│   │   ├── content-feature-plugin.md
│   │   └── game-engine-feature.md
│   └── workflows/
│       └── build.yml
├── .gitignore
├── .swcrc
├── .vscode/
│   └── settings.json
├── CONTRIBUTING.md
├── Dockerfile
├── FEATURES.md
├── LICENSE
├── README.md
├── biome.json
├── cache/
│   ├── file-names.properties
│   ├── main_file_cache.dat0
│   ├── main_file_cache.dat1
│   ├── main_file_cache.dat2
│   ├── main_file_cache.idx0
│   ├── main_file_cache.idx1
│   ├── main_file_cache.idx10
│   ├── main_file_cache.idx11
│   ├── main_file_cache.idx12
│   ├── main_file_cache.idx2
│   ├── main_file_cache.idx255
│   ├── main_file_cache.idx3
│   ├── main_file_cache.idx4
│   ├── main_file_cache.idx5
│   ├── main_file_cache.idx6
│   ├── main_file_cache.idx7
│   ├── main_file_cache.idx8
│   └── main_file_cache.idx9
├── config/
│   ├── file-names.properties
│   └── server-config.example.json
├── data/
│   ├── config/
│   │   ├── combat-styles.json
│   │   ├── examine-item-data.yaml
│   │   ├── item-spawns/
│   │   │   └── lumbridge/
│   │   │       └── lumbridge.json
│   │   ├── items/
│   │   │   ├── barrows/
│   │   │   │   └── dharoks.json
│   │   │   ├── bolts.json
│   │   │   ├── bones.json
│   │   │   ├── containers.json
│   │   │   ├── currency.json
│   │   │   ├── equipment/
│   │   │   │   ├── amulets.json
│   │   │   │   ├── axes.json
│   │   │   │   ├── bows.json
│   │   │   │   ├── capes.json
│   │   │   │   ├── daggers.json
│   │   │   │   ├── darts.json
│   │   │   │   ├── halberd.json
│   │   │   │   ├── hammers.json
│   │   │   │   ├── hatchets.json
│   │   │   │   ├── hats.json
│   │   │   │   ├── javelins.json
│   │   │   │   ├── leather-armour.json
│   │   │   │   ├── longswords.json
│   │   │   │   ├── mauls.json
│   │   │   │   ├── pickaxes.json
│   │   │   │   ├── shortswords.json
│   │   │   │   ├── skillscapes.json
│   │   │   │   ├── slayer.json
│   │   │   │   ├── spears.json
│   │   │   │   ├── staffs.json
│   │   │   │   ├── standard-metals/
│   │   │   │   │   ├── adamant-armour.json
│   │   │   │   │   ├── black-armour.json
│   │   │   │   │   ├── bronze-armour.json
│   │   │   │   │   ├── bronze-weapons.json
│   │   │   │   │   ├── iron-armour.json
│   │   │   │   │   ├── iron-weapons.json
│   │   │   │   │   ├── mithril-armour.json
│   │   │   │   │   ├── mithril-weapons.json
│   │   │   │   │   ├── rune-armour.json
│   │   │   │   │   ├── rune-god-armour.json
│   │   │   │   │   ├── steel-armour.json
│   │   │   │   │   ├── steel-weapons.json
│   │   │   │   │   └── white-armour.json
│   │   │   │   ├── tiaras.json
│   │   │   │   ├── training.json
│   │   │   │   └── whips.json
│   │   │   ├── food.json
│   │   │   ├── holiday/
│   │   │   │   └── partyhats.json
│   │   │   ├── icons.json
│   │   │   ├── logs.json
│   │   │   ├── other.json
│   │   │   ├── quests/
│   │   │   │   ├── lost-city.json
│   │   │   │   └── witchs-potion.json
│   │   │   └── skills/
│   │   │       ├── artisan-tools.json
│   │   │       ├── baking.json
│   │   │       ├── cooking.json
│   │   │       ├── crafting/
│   │   │       │   ├── gems.json
│   │   │       │   └── jewelery-moulds.json
│   │   │       ├── firemaking.json
│   │   │       ├── fishing.json
│   │   │       ├── fletching/
│   │   │       │   ├── arrows.json
│   │   │       │   └── bolts.json
│   │   │       ├── herblore/
│   │   │       │   ├── herbs.json
│   │   │       │   ├── ingredients.json
│   │   │       │   └── tools.json
│   │   │       ├── herblore.json
│   │   │       ├── mining.json
│   │   │       ├── prayer.json
│   │   │       └── runecrafting.json
│   │   ├── music/
│   │   │   └── musicRegions.json
│   │   ├── npc-spawns/
│   │   │   ├── alkharid/
│   │   │   │   └── alkharid-general.json
│   │   │   ├── ardougne/
│   │   │   │   ├── bankers.json
│   │   │   │   ├── guards.json
│   │   │   │   └── market.json
│   │   │   ├── camelot/
│   │   │   │   └── bankers.json
│   │   │   ├── canifis/
│   │   │   │   └── bankers.json
│   │   │   ├── catherby/
│   │   │   │   └── bankers.json
│   │   │   ├── draynor/
│   │   │   │   └── bankers.json
│   │   │   ├── edgeville/
│   │   │   │   └── bankers.json
│   │   │   ├── falador/
│   │   │   │   ├── bankers.json
│   │   │   │   └── guards.json
│   │   │   ├── keldagrim/
│   │   │   │   └── bankers.json
│   │   │   ├── lumbridge/
│   │   │   │   ├── bankers.json
│   │   │   │   ├── lumbridge-general.json
│   │   │   │   ├── lumbridge-goblins.json
│   │   │   │   └── lumbridge-sheep.json
│   │   │   ├── magebank/
│   │   │   │   └── bankers.json
│   │   │   ├── nardah/
│   │   │   │   └── bankers.json
│   │   │   ├── pestcontrol/
│   │   │   │   └── bankers.json
│   │   │   ├── portsarim/
│   │   │   │   └── port-sarim-general.json
│   │   │   ├── rimmington/
│   │   │   │   └── rimmington.json
│   │   │   ├── shilovillage/
│   │   │   │   └── bankers.json
│   │   │   ├── varrock/
│   │   │   │   ├── bankers.json
│   │   │   │   ├── blue-moon-inn.json
│   │   │   │   └── varrock-general.json
│   │   │   └── yanille/
│   │   │       └── bankers.json
│   │   ├── npcs/
│   │   │   ├── alkharid.json
│   │   │   ├── ardougne.json
│   │   │   ├── bankers.json
│   │   │   ├── barbarians.json
│   │   │   ├── general.json
│   │   │   ├── generic-humans.json
│   │   │   ├── goblins.json
│   │   │   ├── guards.json
│   │   │   ├── lumbridge.json
│   │   │   ├── port-sarim.json
│   │   │   ├── rimmington.json
│   │   │   ├── sheep.json
│   │   │   └── varrock.json
│   │   ├── scenery-spawns.yaml
│   │   ├── shops/
│   │   │   ├── alkharid/
│   │   │   │   ├── alkharid-gem-trader.json
│   │   │   │   ├── dommiks-crafting-store.json
│   │   │   │   ├── louies-armored-legs.json
│   │   │   │   └── ranaels-skirt-store.json
│   │   │   ├── lumbridge/
│   │   │   │   ├── bobs-axes.json
│   │   │   │   └── lumbridge-general-store.json
│   │   │   ├── portsarim/
│   │   │   │   └── bettys-magic-emporium.json
│   │   │   ├── shilo-village/
│   │   │   │   └── oblis-general-store.json
│   │   │   └── varrock/
│   │   │       └── zaffs-staffs.json
│   │   ├── travel-locations-data.yaml
│   │   ├── widgets.json
│   │   └── xteas/
│   │       └── 435.json
│   └── saves/
│       └── .gitkeep
├── docker-compose.yml
├── jest.config.ts
├── nodemon.json
├── package.json
├── src/
│   ├── engine/
│   │   ├── action/
│   │   │   ├── action-pipeline.ts
│   │   │   ├── hook/
│   │   │   │   ├── action-hook.ts
│   │   │   │   ├── hook-filters.test.ts
│   │   │   │   ├── hook-filters.ts
│   │   │   │   └── task.ts
│   │   │   ├── loader.ts
│   │   │   └── pipe/
│   │   │       ├── button.action.ts
│   │   │       ├── equipment-change.action.ts
│   │   │       ├── item-interaction.action.ts
│   │   │       ├── item-on-item.action.ts
│   │   │       ├── item-on-npc.action.ts
│   │   │       ├── item-on-object.action.ts
│   │   │       ├── item-on-player.action.ts
│   │   │       ├── item-on-world-item.action.ts
│   │   │       ├── item-swap.action.ts
│   │   │       ├── magic-on-npc.action.ts
│   │   │       ├── move-item.action.ts
│   │   │       ├── npc-init.action.ts
│   │   │       ├── npc-interaction.action.ts
│   │   │       ├── object-interaction.action.ts
│   │   │       ├── player-command.action.ts
│   │   │       ├── player-init.action.ts
│   │   │       ├── player-interaction.action.ts
│   │   │       ├── prayer.action.ts
│   │   │       ├── region-change.action.ts
│   │   │       ├── spawned-item-interaction.action.ts
│   │   │       ├── task/
│   │   │       │   ├── queueable-task.ts
│   │   │       │   ├── walk-to-actor-plugin-task.ts
│   │   │       │   ├── walk-to-item-plugin-task.ts
│   │   │       │   └── walk-to-object-plugin-task.ts
│   │   │       └── widget-interaction.action.ts
│   │   ├── config/
│   │   │   ├── config-handler.ts
│   │   │   ├── data-dump.ts
│   │   │   ├── directories.ts
│   │   │   ├── item-config.ts
│   │   │   ├── item-spawn-config.ts
│   │   │   ├── music-regions-config.ts
│   │   │   ├── npc-config.ts
│   │   │   ├── npc-spawn-config.ts
│   │   │   ├── quest-config.ts
│   │   │   ├── shop-config.testskip.ts
│   │   │   └── shop-config.ts
│   │   ├── interface/
│   │   │   └── interface-state.ts
│   │   ├── net/
│   │   │   ├── inbound-packet-handler.ts
│   │   │   ├── inbound-packets/
│   │   │   │   ├── add-friend.packet.ts
│   │   │   │   ├── add-ignore.packet.ts
│   │   │   │   ├── blinking-tab-click.packet.ts
│   │   │   │   ├── button-click.packet.ts
│   │   │   │   ├── character-design.packet.ts
│   │   │   │   ├── chat.packet.ts
│   │   │   │   ├── command.packet.ts
│   │   │   │   ├── drop-item.packet.ts
│   │   │   │   ├── examine.packet.ts
│   │   │   │   ├── item-interaction.packet.ts
│   │   │   │   ├── item-on-item.packet.ts
│   │   │   │   ├── item-on-npc.packet.ts
│   │   │   │   ├── item-on-object.packet.ts
│   │   │   │   ├── item-on-player.packet.ts
│   │   │   │   ├── item-on-world-item.packet.ts
│   │   │   │   ├── item-swap.packet.ts
│   │   │   │   ├── junk.packet.ts
│   │   │   │   ├── magic-attack.packet.ts
│   │   │   │   ├── npc-interaction.packet.ts
│   │   │   │   ├── number-input.packet.ts
│   │   │   │   ├── object-interaction.packet.ts
│   │   │   │   ├── pickup-item.packet.ts
│   │   │   │   ├── player-interaction.packet.ts
│   │   │   │   ├── private-message.packet.ts
│   │   │   │   ├── remove-friend.packet.ts
│   │   │   │   ├── remove-ignore.packet.ts
│   │   │   │   ├── social-button.packet.ts
│   │   │   │   ├── walk.packet.ts
│   │   │   │   ├── widget-interaction.packet.ts
│   │   │   │   └── widgets-closed.packet.ts
│   │   │   ├── isaac.ts
│   │   │   ├── outbound-packet-handler.ts
│   │   │   └── packet.ts
│   │   ├── plugins/
│   │   │   ├── content-plugin.ts
│   │   │   ├── loader.ts
│   │   │   └── reload-content.ts
│   │   ├── task/
│   │   │   ├── README.md
│   │   │   ├── impl/
│   │   │   │   ├── actor-actor-interaction-task.ts
│   │   │   │   ├── actor-landscape-object-interaction-task.ts
│   │   │   │   ├── actor-task.ts
│   │   │   │   ├── actor-teleport-task.ts
│   │   │   │   ├── actor-walk-to-task.ts
│   │   │   │   └── actor-world-item-interaction-task.ts
│   │   │   ├── task-scheduler.test.ts
│   │   │   ├── task-scheduler.ts
│   │   │   ├── task.test.ts
│   │   │   ├── task.ts
│   │   │   ├── types.ts
│   │   │   └── utils/
│   │   │       └── _testing.ts
│   │   ├── util/
│   │   │   ├── address.ts
│   │   │   ├── colors.ts
│   │   │   ├── data.ts
│   │   │   ├── error-handling.ts
│   │   │   ├── files.ts
│   │   │   ├── num.ts
│   │   │   ├── objects.ts
│   │   │   ├── queue.test.ts
│   │   │   ├── queue.ts
│   │   │   ├── strings.ts
│   │   │   ├── time.ts
│   │   │   └── varbits.ts
│   │   └── world/
│   │       ├── actor/
│   │       │   ├── actor.ts
│   │       │   ├── combat.ts
│   │       │   ├── dialogue.ts
│   │       │   ├── magic.ts
│   │       │   ├── metadata.ts
│   │       │   ├── npc.ts
│   │       │   ├── pathfinding.ts
│   │       │   ├── player/
│   │       │   │   ├── achievements.ts
│   │       │   │   ├── attack.ts
│   │       │   │   ├── cutscenes.ts
│   │       │   │   ├── dialogue-action.ts
│   │       │   │   ├── metadata.ts
│   │       │   │   ├── model.ts
│   │       │   │   ├── player-data.ts
│   │       │   │   ├── player.ts
│   │       │   │   ├── private-messaging.ts
│   │       │   │   ├── quest.ts
│   │       │   │   └── sync/
│   │       │   │       ├── actor-sync.ts
│   │       │   │       ├── npc-sync-task.ts
│   │       │   │       └── player-sync-task.ts
│   │       │   ├── prayer.ts
│   │       │   ├── skills.ts
│   │       │   ├── update-flags.ts
│   │       │   ├── util.ts
│   │       │   └── walking-queue.ts
│   │       ├── config/
│   │       │   ├── animation-ids.ts
│   │       │   ├── examine-data.ts
│   │       │   ├── gfx-ids.ts
│   │       │   ├── harvest-tool.ts
│   │       │   ├── harvestable-object.ts
│   │       │   ├── item-ids.ts
│   │       │   ├── object-ids.ts
│   │       │   ├── scenery-spawns.ts
│   │       │   ├── songs.ts
│   │       │   ├── sound-ids.ts
│   │       │   ├── travel-locations.ts
│   │       │   └── widget.ts
│   │       ├── direction.ts
│   │       ├── index.ts
│   │       ├── instances.ts
│   │       ├── items/
│   │       │   ├── item-container.ts
│   │       │   ├── item.ts
│   │       │   └── world-item.ts
│   │       ├── map/
│   │       │   ├── chunk-manager.ts
│   │       │   ├── chunk.ts
│   │       │   ├── collision-map.ts
│   │       │   ├── landscape-object.ts
│   │       │   └── region.ts
│   │       ├── position.ts
│   │       ├── skill-util/
│   │       │   ├── glory-boost.ts
│   │       │   ├── harvest-roll.ts
│   │       │   └── harvest-skill.ts
│   │       ├── sound/
│   │       │   └── music.ts
│   │       ├── task.ts
│   │       └── world.ts
│   ├── plugins/
│   │   ├── buttons/
│   │   │   ├── logout-button.plugin.ts
│   │   │   ├── magic-attack.plugin.ts
│   │   │   ├── magic-teleports.plugin.ts
│   │   │   ├── player-emotes.plugin.ts
│   │   │   └── player-setting-button.plugin.ts
│   │   ├── combat/
│   │   │   └── combat-styles.plugin.ts
│   │   ├── commands/
│   │   │   ├── bank-command.plugin.ts
│   │   │   ├── camera-commands.plugin.ts
│   │   │   ├── clear-inventory-command.plugin.ts
│   │   │   ├── client-config-command.plugin.ts
│   │   │   ├── current-position-command.plugin.ts
│   │   │   ├── data-dump-command.plugin.ts
│   │   │   ├── dump-metadata-command.plugin.ts
│   │   │   ├── give-item-command.plugin.ts
│   │   │   ├── groups-debug.plugin.ts
│   │   │   ├── pathing-commands.plugin.ts
│   │   │   ├── player-animation-command.plugin.ts
│   │   │   ├── player-graphics-command.plugin.ts
│   │   │   ├── quest-list-command.plugin.ts
│   │   │   ├── region-debug-commands.plugin.ts
│   │   │   ├── reset-camera-command.plugin.ts
│   │   │   ├── sound-song-commands.plugin.ts
│   │   │   ├── spawn-npc-command.plugin.ts
│   │   │   ├── spawn-scenery-command.plugin.ts
│   │   │   ├── spawn-test-players-command.plugin.ts
│   │   │   ├── stat-commands.plugin.ts
│   │   │   ├── teleport-command.plugin.ts
│   │   │   ├── transform-command.plugin.ts
│   │   │   ├── travel-back-command.plugin.ts
│   │   │   ├── travel-command.plugin.ts
│   │   │   └── widget-commands.plugin.ts
│   │   ├── dialogue/
│   │   │   ├── dialogue-option.plugin.ts
│   │   │   └── item-selection.plugin.ts
│   │   ├── items/
│   │   │   ├── buckets/
│   │   │   │   ├── empty-container.plugin.ts
│   │   │   │   └── fill-container.plugin.ts
│   │   │   ├── capes/
│   │   │   │   └── skillcape-emotes.plugin.ts
│   │   │   ├── consumables/
│   │   │   │   └── eating.plugin.ts
│   │   │   ├── drop-item.plugin.ts
│   │   │   ├── equipment/
│   │   │   │   ├── equip-item.plugin.ts
│   │   │   │   ├── equipment-stats.plugin.ts
│   │   │   │   └── unequip-item.plugin.ts
│   │   │   ├── herblore/
│   │   │   │   └── clean-herb.ts
│   │   │   ├── move-item.plugin.ts
│   │   │   ├── pickup-item.plugin.ts
│   │   │   ├── pots/
│   │   │   │   └── empty-pot.plugin.ts
│   │   │   ├── rotten-potato/
│   │   │   │   ├── helpers/
│   │   │   │   │   ├── rotten-potato-helpers.ts
│   │   │   │   │   └── rotten-potato-travel.ts
│   │   │   │   ├── hooks/
│   │   │   │   │   ├── rotten-potato-command-hook.ts
│   │   │   │   │   ├── rotten-potato-eat.ts
│   │   │   │   │   ├── rotten-potato-item-on-item.ts
│   │   │   │   │   ├── rotten-potato-item-on-player.ts
│   │   │   │   │   └── rotten-potato-peel.ts
│   │   │   │   └── rotten-potato.plugin.ts
│   │   │   ├── runecrafting/
│   │   │   │   └── tiaras.plugin.ts
│   │   │   ├── shopping/
│   │   │   │   ├── buy-from-shop.plugin.ts
│   │   │   │   ├── item-value.plugin.ts
│   │   │   │   └── sell-to-shop.plugin.ts
│   │   │   └── swap-items.plugin.ts
│   │   ├── music/
│   │   │   ├── music-regions.plugin.ts
│   │   │   └── music-tab.plugin.ts
│   │   ├── npcs/
│   │   │   ├── al-kharid/
│   │   │   │   ├── dommik-crafting-shop.plugin.ts
│   │   │   │   ├── gem-trader.plugin.ts
│   │   │   │   ├── karim.plugin.ts
│   │   │   │   ├── louie-armoured-legs.plugin.ts
│   │   │   │   └── ranael-super-skirt.plugin.ts
│   │   │   ├── falador/
│   │   │   │   └── custom-guards.plugin.ts
│   │   │   ├── lumbridge/
│   │   │   │   ├── bob.plugin.ts
│   │   │   │   ├── hans.plugin.ts
│   │   │   │   ├── lumbridge-farm-helpers.plugin.ts
│   │   │   │   └── shopkeeper.plugin.ts
│   │   │   ├── port-sarim/
│   │   │   │   └── betty.plugin.ts
│   │   │   └── varrock/
│   │   │       ├── blue-moon-inn.plugin.ts
│   │   │       ├── master-smithing-tutor.plugin.ts
│   │   │       ├── wilough.plugin.ts
│   │   │       └── zaff-superior-staffs.plugin.ts
│   │   ├── objects/
│   │   │   ├── bank/
│   │   │   │   ├── bank.plugin.ts
│   │   │   │   └── deposit-box.plugin.ts
│   │   │   ├── cows/
│   │   │   │   └── cow.plugin.ts
│   │   │   ├── crates/
│   │   │   │   └── crates.plugin.ts
│   │   │   ├── doors/
│   │   │   │   ├── door.plugin.ts
│   │   │   │   ├── double-door.plugin.ts
│   │   │   │   └── gate.plugin.ts
│   │   │   ├── dungeon-entrances/
│   │   │   │   └── taverly-dungeon-ladder.plugin.ts
│   │   │   ├── item-spawns/
│   │   │   │   └── take-axe.plugin.ts
│   │   │   ├── ladders/
│   │   │   │   └── ladder.plugin.ts
│   │   │   ├── mill/
│   │   │   │   ├── flour-bin.plugin.ts
│   │   │   │   ├── hopper-controls.plugin.ts
│   │   │   │   └── hopper.plugin.ts
│   │   │   └── pickables/
│   │   │       └── pickables.plugin.ts
│   │   ├── player/
│   │   │   ├── follow-player.plugin.js
│   │   │   ├── login-unlock-emotes.plugin.ts
│   │   │   ├── login-update-settings.plugin.ts
│   │   │   └── update-friends-list.plugin.ts
│   │   ├── quests/
│   │   │   ├── cooks-assistant-quest.plugin.ts
│   │   │   ├── goblin-diplomacy-tutorial/
│   │   │   │   ├── goblin-diplomacy-quest.plugin.ts
│   │   │   │   ├── melee-tutor-dialogue.ts
│   │   │   │   ├── runescape-guide-dialogue.ts
│   │   │   │   └── stage-handler.ts
│   │   │   ├── quest-journal.plugin.ts
│   │   │   └── witchs-potion-quest.plugin.ts
│   │   └── skills/
│   │       ├── construction/
│   │       │   ├── con-constants.ts
│   │       │   ├── home-saver.ts
│   │       │   ├── house.ts
│   │       │   ├── index.ts
│   │       │   ├── room-builder.ts
│   │       │   └── util.ts
│   │       ├── crafting/
│   │       │   ├── sheep-plugin.plugin.ts
│   │       │   └── spinning-wheel.plugin.ts
│   │       ├── firemaking/
│   │       │   ├── chance.ts
│   │       │   ├── data.ts
│   │       │   ├── firemaking-task.ts
│   │       │   ├── index.ts
│   │       │   ├── light-fire.ts
│   │       │   └── types.ts
│   │       ├── fletching/
│   │       │   ├── fletching-constants.ts
│   │       │   ├── fletching-types.ts
│   │       │   └── fletching.plugin.ts
│   │       ├── level-up-dialogue.plugin.ts
│   │       ├── mining/
│   │       │   ├── chance.ts
│   │       │   ├── mining-task.ts
│   │       │   ├── mining.plugin.ts
│   │       │   └── prospecting.plugin.ts
│   │       ├── prayer/
│   │       │   └── bury-bones.plugin.ts
│   │       ├── runecrafting/
│   │       │   ├── runecrafting-altar.plugin.ts
│   │       │   ├── runecrafting-constants.ts
│   │       │   ├── runecrafting-crafting.plugin.ts
│   │       │   ├── runecrafting-tiara.plugin.ts
│   │       │   └── runecrafting-types.ts
│   │       ├── skill-guides/
│   │       │   ├── Strength.json
│   │       │   ├── agility.json
│   │       │   ├── attack.json
│   │       │   ├── construction.json
│   │       │   ├── cooking.json
│   │       │   ├── crafting.json
│   │       │   ├── defence.json
│   │       │   ├── farming.json
│   │       │   ├── firemaking.json
│   │       │   ├── fishing.json
│   │       │   ├── fletching.json
│   │       │   ├── herblore.json
│   │       │   ├── hitpoint.json
│   │       │   ├── magic.json
│   │       │   ├── mining.json
│   │       │   ├── prayer.json
│   │       │   ├── ranged.json
│   │       │   ├── runecrafting.json
│   │       │   ├── skill-guide-config.ts
│   │       │   ├── skill-guides.plugin.ts
│   │       │   ├── slayer.json
│   │       │   ├── smithing.json
│   │       │   ├── thieving.json
│   │       │   └── woodcutting.json
│   │       ├── smithing/
│   │       │   ├── forging-constants.ts
│   │       │   ├── forging-task.ts
│   │       │   ├── forging-types.ts
│   │       │   ├── forging.plugin.ts
│   │       │   ├── smelting-constants.ts
│   │       │   ├── smelting-task.ts
│   │       │   ├── smelting-types.ts
│   │       │   └── smelting.plugin.ts
│   │       └── woodcutting/
│   │           ├── chance.ts
│   │           ├── index.ts
│   │           └── woodcutting-task.ts
│   └── server/
│       ├── game/
│       │   ├── game-server-config.ts
│       │   ├── game-server-connection.ts
│       │   └── game-server.ts
│       ├── gateway/
│       │   └── gateway-server.ts
│       └── runner.ts
└── tsconfig.json
Download .txt
SYMBOL INDEX (1104 symbols across 156 files)

FILE: src/engine/action/action-pipeline.ts
  type ActionStrength (line 11) | type ActionStrength = 'weak' | 'normal' | 'strong';
  type ActionType (line 16) | type ActionType =
  type ActionCancelType (line 55) | type ActionCancelType = 'manual-movement' | 'pathing-movement' | 'generi...
  type ActionPipeHandler (line 60) | type ActionPipeHandler = (...args: any[]) => RunnableHooks | void;
  type ActionPipe (line 65) | type ActionPipe = [ActionType, ActionPipeHandler];
  type RunnableHooks (line 70) | interface RunnableHooks<T = any> {
  class ActionPipeline (line 81) | class ActionPipeline {
    method constructor (line 88) | public constructor(public readonly actor: Actor) {
    method getPipe (line 92) | public static getPipe(action: ActionType): ActionPipeHandler | null {
    method register (line 96) | public static register(action: ActionType, actionPipeHandlerFn: Action...
    method shutdown (line 100) | public shutdown(): void {
    method call (line 104) | public async call(action: ActionType, ...args: any[]): Promise<void> {
    method cancelRunningTasks (line 118) | public async cancelRunningTasks(): Promise<void> {
    method runActionHandler (line 136) | private async runActionHandler(actionHandler: any, args: any[]): Promi...
    method runHook (line 164) | private async runHook(actionHook: ActionHook, action: any): Promise<vo...
    method paused (line 186) | public get paused(): boolean {

FILE: src/engine/action/hook/action-hook.ts
  type QuestRequirement (line 9) | interface QuestRequirement {
  type ActionHook (line 18) | interface ActionHook<A = any, H = any> {
  function sortActionHooks (line 54) | function sortActionHooks<T = any>(actionHooks: ActionHook<T>[]): ActionH...

FILE: src/engine/action/hook/hook-filters.ts
  function questHookFilter (line 66) | function questHookFilter(player: Player, actionHook: ActionHook): boolean {

FILE: src/engine/action/hook/task.ts
  type TaskSessionData (line 15) | type TaskSessionData = { [key: string]: any };
  type TaskDetails (line 17) | interface TaskDetails<T> {
  type HookTask (line 25) | interface HookTask<T = any> {
  class TaskExecutor (line 36) | class TaskExecutor<T> {
    method constructor (line 45) | public constructor(
    method run (line 54) | public async run(): Promise<void> {
    method execute (line 90) | public async execute(): Promise<boolean> {
    method canActivate (line 121) | public async canActivate(): Promise<boolean> {
    method stop (line 139) | public async stop(): Promise<void> {
    method getDetails (line 148) | public getDetails(): TaskDetails<T> {
    method valid (line 158) | public get valid(): boolean {

FILE: src/engine/action/loader.ts
  function loadActionFiles (line 11) | async function loadActionFiles(): Promise<void> {

FILE: src/engine/action/pipe/button.action.ts
  type ButtonActionHook (line 9) | interface ButtonActionHook extends ActionHook<ButtonAction, buttonAction...
  type buttonActionHandler (line 23) | type buttonActionHandler = (buttonAction: ButtonAction) => void | Promis...
  type ButtonAction (line 28) | interface ButtonAction {

FILE: src/engine/action/pipe/equipment-change.action.ts
  type EquipmentChangeActionHook (line 13) | interface EquipmentChangeActionHook extends ActionHook<EquipmentChangeAc...
  type equipmentChangeActionHandler (line 23) | type equipmentChangeActionHandler = (equipmentChangeAction: EquipmentCha...
  type EquipmentChangeType (line 28) | type EquipmentChangeType = 'equip' | 'unequip';
  type EquipmentChangeAction (line 33) | interface EquipmentChangeAction {

FILE: src/engine/action/pipe/item-interaction.action.ts
  type ItemInteractionActionHook (line 13) | interface ItemInteractionActionHook extends ActionHook<ItemInteractionAc...
  type itemInteractionActionHandler (line 27) | type itemInteractionActionHandler = (itemInteractionAction: ItemInteract...
  type ItemInteractionAction (line 32) | interface ItemInteractionAction {

FILE: src/engine/action/pipe/item-on-item.action.ts
  type ItemOnItemActionHook (line 11) | interface ItemOnItemActionHook extends ActionHook<ItemOnItemAction, item...
  type itemOnItemActionHandler (line 19) | type itemOnItemActionHandler = (itemOnItemAction: ItemOnItemAction) => v...
  type ItemOnItemAction (line 24) | interface ItemOnItemAction {

FILE: src/engine/action/pipe/item-on-npc.action.ts
  type ItemOnNpcActionHook (line 14) | interface ItemOnNpcActionHook extends ActionHook<ItemOnNpcAction, itemOn...
  type itemOnNpcActionHandler (line 26) | type itemOnNpcActionHandler = (itemOnNpcAction: ItemOnNpcAction) => void;
  type ItemOnNpcAction (line 31) | interface ItemOnNpcAction {

FILE: src/engine/action/pipe/item-on-object.action.ts
  type ItemOnObjectActionHook (line 14) | interface ItemOnObjectActionHook extends ActionHook<ItemOnObjectAction, ...
  type itemOnObjectActionHandler (line 26) | type itemOnObjectActionHandler = (itemOnObjectAction: ItemOnObjectAction...
  type ItemOnObjectAction (line 31) | interface ItemOnObjectAction {

FILE: src/engine/action/pipe/item-on-player.action.ts
  type ItemOnPlayerActionHook (line 13) | interface ItemOnPlayerActionHook extends ActionHook<itemOnPlayerActionHa...
  type itemOnPlayerActionHandler (line 23) | type itemOnPlayerActionHandler = (itemOnPlayerAction: ItemOnPlayerAction...
  type ItemOnPlayerAction (line 28) | interface ItemOnPlayerAction {

FILE: src/engine/action/pipe/item-on-world-item.action.ts
  type ItemOnWorldItemActionHook (line 14) | interface ItemOnWorldItemActionHook extends ActionHook<ItemOnWorldItemAc...
  type itemOnWorldItemActionHandler (line 24) | type itemOnWorldItemActionHandler = (itemOnWorldItemAction: ItemOnWorldI...
  type ItemOnWorldItemAction (line 31) | interface ItemOnWorldItemAction {

FILE: src/engine/action/pipe/item-swap.action.ts
  type ItemSwapActionHook (line 10) | interface ItemSwapActionHook extends ActionHook<ItemSwapAction, itemSwap...
  type itemSwapActionHandler (line 18) | type itemSwapActionHandler = (itemSwapAction: ItemSwapAction) => void;
  type ItemSwapAction (line 23) | interface ItemSwapAction {

FILE: src/engine/action/pipe/magic-on-npc.action.ts
  type MagicOnNPCActionHook (line 10) | interface MagicOnNPCActionHook extends ActionHook<MagicOnNPCAction, magi...
  type magiconnpcActionHandler (line 24) | type magiconnpcActionHandler = (buttonAction: MagicOnNPCAction) => void ...
  type MagicOnNPCAction (line 29) | interface MagicOnNPCAction {

FILE: src/engine/action/pipe/move-item.action.ts
  type MoveItemActionHook (line 10) | interface MoveItemActionHook extends ActionHook<MoveItemAction, moveItem...
  type moveItemActionHandler (line 18) | type moveItemActionHandler = (moveItemAction: MoveItemAction) => void;
  type MoveItemAction (line 23) | interface MoveItemAction {

FILE: src/engine/action/pipe/npc-init.action.ts
  type NpcInitActionHook (line 10) | interface NpcInitActionHook extends ActionHook<NpcInitAction, npcInitAct...
  type npcInitActionHandler (line 18) | type npcInitActionHandler = (npcAction: NpcInitAction) => void;
  type NpcInitAction (line 23) | interface NpcInitAction {

FILE: src/engine/action/pipe/npc-interaction.action.ts
  type NpcInteractionActionHook (line 13) | interface NpcInteractionActionHook extends ActionHook<NpcInteractionActi...
  type npcInteractionActionHandler (line 25) | type npcInteractionActionHandler = (npcInteractionAction: NpcInteraction...
  type NpcInteractionAction (line 30) | interface NpcInteractionAction {

FILE: src/engine/action/pipe/object-interaction.action.ts
  type ObjectInteractionActionHook (line 13) | interface ObjectInteractionActionHook extends ActionHook<ObjectInteracti...
  type objectInteractionActionHandler (line 25) | type objectInteractionActionHandler = (objectInteractionAction: ObjectIn...
  type ObjectInteractionAction (line 30) | interface ObjectInteractionAction {

FILE: src/engine/action/pipe/player-command.action.ts
  type PlayerCommandActionHook (line 11) | interface PlayerCommandActionHook extends ActionHook<PlayerCommandAction...
  type commandActionHandler (line 25) | type commandActionHandler = (playerCommandAction: PlayerCommandAction) =...
  type PlayerCommandAction (line 30) | interface PlayerCommandAction {

FILE: src/engine/action/pipe/player-init.action.ts
  type PlayerInitActionHook (line 9) | type PlayerInitActionHook = ActionHook<PlayerInitAction, playerInitActio...
  type playerInitActionHandler (line 14) | type playerInitActionHandler = (playerInitAction: PlayerInitAction) => v...
  type PlayerInitAction (line 19) | interface PlayerInitAction {

FILE: src/engine/action/pipe/player-interaction.action.ts
  type PlayerInteractionActionHook (line 12) | interface PlayerInteractionActionHook extends ActionHook<PlayerInteracti...
  type playerInteractionActionHandler (line 22) | type playerInteractionActionHandler = (playerInteractionAction: PlayerIn...
  type PlayerInteractionAction (line 27) | interface PlayerInteractionAction {

FILE: src/engine/action/pipe/prayer.action.ts
  type PrayerActionHook (line 10) | interface PrayerActionHook extends ActionHook<PrayerAction, PrayerAction...
  type PrayerActionHandler (line 24) | type PrayerActionHandler = (buttonAction: PrayerAction) => void | Promis...
  type PrayerAction (line 29) | interface PrayerAction {

FILE: src/engine/action/pipe/region-change.action.ts
  type RegionChangeActionHook (line 12) | interface RegionChangeActionHook extends ActionHook<RegionChangeAction, ...
  type regionChangeActionHandler (line 24) | type regionChangeActionHandler = (regionChangeAction: RegionChangeAction...
  type RegionChangeAction (line 29) | interface RegionChangeAction {

FILE: src/engine/action/pipe/spawned-item-interaction.action.ts
  type SpawnedItemInteractionHook (line 15) | interface SpawnedItemInteractionHook extends ActionHook<SpawnedItemInter...
  type spawnedItemInteractionHandler (line 27) | type spawnedItemInteractionHandler = (spawnedItemInteractionAction: Spaw...
  type SpawnedItemInteractionAction (line 32) | interface SpawnedItemInteractionAction {

FILE: src/engine/action/pipe/task/queueable-task.ts
  type QueueableTaskEval (line 14) | interface QueueableTaskEval {
  type ObjectAction (line 22) | type ObjectAction = ObjectInteractionAction | ItemOnObjectAction;
  type ObjectActionHook (line 27) | type ObjectActionHook<TAction extends ObjectAction> = ActionHook<TAction...
  type ObjectActionData (line 32) | type ObjectActionData<TAction extends ObjectAction> = Omit<TAction, 'pla...
  class QueueableTask (line 41) | class QueueableTask<TAction extends ObjectAction> extends ActorTask<Play...
    method constructor (line 62) | constructor(
    method execute (line 81) | public execute(): void {

FILE: src/engine/action/pipe/task/walk-to-actor-plugin-task.ts
  type ActorAction (line 13) | type ActorAction = PlayerInteractionAction | ItemOnPlayerAction | NpcInt...
  type ActorActionHook (line 18) | type ActorActionHook<TAction extends ActorAction> = ActionHook<TAction, ...
  type ActorKey (line 20) | type ActorKey = 'otherPlayer' | 'npc';
  type ActorActionData (line 25) | type ActorActionData<TAction extends ActorAction> = Omit<TAction, 'playe...
  class WalkToActorPluginTask (line 33) | class WalkToActorPluginTask<
    method constructor (line 47) | constructor(
    method execute (line 64) | public execute(): void {

FILE: src/engine/action/pipe/task/walk-to-item-plugin-task.ts
  class WalkToItemPluginTask (line 13) | class WalkToItemPluginTask extends ActorWorldItemInteractionTask<Player> {
    method constructor (line 24) | constructor(plugins: SpawnedItemInteractionHook[], player: Player, wor...
    method execute (line 34) | public execute(): void {

FILE: src/engine/action/pipe/task/walk-to-object-plugin-task.ts
  type ObjectAction (line 11) | type ObjectAction = ObjectInteractionAction | ItemOnObjectAction;
  type ObjectActionHook (line 16) | type ObjectActionHook<TAction extends ObjectAction> = ActionHook<TAction...
  type ObjectActionData (line 21) | type ObjectActionData<TAction extends ObjectAction> = Omit<TAction, 'pla...
  class WalkToObjectPluginTask (line 29) | class WalkToObjectPluginTask<TAction extends ObjectAction> extends Actor...
    method constructor (line 37) | constructor(plugins: ObjectActionHook<TAction>[], player: Player, land...
    method execute (line 54) | public execute(): void {

FILE: src/engine/action/pipe/widget-interaction.action.ts
  type WidgetInteractionActionHook (line 10) | interface WidgetInteractionActionHook extends ActionHook<WidgetInteracti...
  type widgetInteractionActionHandler (line 24) | type widgetInteractionActionHandler = (widgetInteractionAction: WidgetIn...
  type WidgetInteractionAction (line 29) | interface WidgetInteractionAction {

FILE: src/engine/config/config-handler.ts
  function loadCoreConfigurations (line 39) | async function loadCoreConfigurations(): Promise<void> {
  function loadGameConfigurations (line 43) | async function loadGameConfigurations(): Promise<void> {

FILE: src/engine/config/data-dump.ts
  type DataDumpResult (line 7) | interface DataDumpResult {
  function dump (line 12) | function dump<T>(fileName: string, definitions: T[]): DataDumpResult {

FILE: src/engine/config/directories.ts
  constant BUILD_DIR (line 3) | const BUILD_DIR = join('.', 'dist', 'engine');

FILE: src/engine/config/item-config.ts
  type WeaponStyle (line 6) | type WeaponStyle =
  type EquipmentSlot (line 49) | type EquipmentSlot =
  type EquipmentType (line 81) | type EquipmentType = 'hat' | 'helmet' | 'torso' | 'full_top' | 'one_hand...
  type ItemRequirements (line 83) | interface ItemRequirements {
  type OffensiveBonuses (line 88) | interface OffensiveBonuses {
  type DefensiveBonuses (line 97) | interface DefensiveBonuses {
  type SkillBonuses (line 105) | interface SkillBonuses {
  type WeaponInfo (line 109) | interface WeaponInfo {
  type ItemMetadata (line 114) | interface ItemMetadata {
  type EquipmentData (line 142) | interface EquipmentData {
  type ItemPresetConfiguration (line 152) | interface ItemPresetConfiguration {
  type ItemConfiguration (line 156) | interface ItemConfiguration {
  class ItemDetails (line 186) | class ItemDetails {
    method constructor (line 211) | public constructor(item?: ItemDetails) {
    method lowAlchValue (line 218) | get lowAlchValue(): number {
    method highAlchValue (line 222) | get highAlchValue(): number {
    method minimumValue (line 226) | get minimumValue(): number {
  function translateItemConfig (line 231) | function translateItemConfig(key: string | undefined, config: ItemConfig...
  function loadItemConfigurations (line 258) | async function loadItemConfigurations(path: string): Promise<{

FILE: src/engine/config/item-spawn-config.ts
  type ItemSpawnConfiguration (line 4) | interface ItemSpawnConfiguration {
  class ItemSpawn (line 15) | class ItemSpawn {
    method constructor (line 23) | public constructor(itemKey: string, position: Position) {
  function translateItemSpawnConfig (line 29) | function translateItemSpawnConfig(config: ItemSpawnConfiguration): ItemS...
  function loadItemSpawnConfigurations (line 47) | async function loadItemSpawnConfigurations(path: string): Promise<ItemSp...

FILE: src/engine/config/music-regions-config.ts
  type MusicRegionsConfiguration (line 3) | interface MusicRegionsConfiguration {
  class MusicTrack (line 10) | class MusicTrack {
    method constructor (line 16) | public constructor(songId: number, songName: string, musicTabButtonId:...
  function translateMusicRegionsConfig (line 24) | function translateMusicRegionsConfig(config: MusicRegionsConfiguration):...
  function loadMusicRegionConfigurations (line 28) | async function loadMusicRegionConfigurations(): Promise<MusicTrack[]> {

FILE: src/engine/config/npc-config.ts
  type NpcSkills (line 9) | interface NpcSkills {
  type OffensiveStats (line 13) | interface OffensiveStats {
  type NpcCombatAnimations (line 23) | interface NpcCombatAnimations {
  type DropTable (line 29) | interface DropTable {
  type NpcPresetConfiguration (line 37) | interface NpcPresetConfiguration {
  type NpcServerConfig (line 41) | interface NpcServerConfig {
  class NpcDetails (line 70) | class NpcDetails extends NpcConfig {
    method constructor (line 82) | public constructor(defaultValues: { [key: string]: any }) {
  function translateNpcServerConfig (line 88) | function translateNpcServerConfig(npcKey: string | undefined, config: Np...
  function loadNpcConfigurations (line 113) | async function loadNpcConfigurations(path: string): Promise<{

FILE: src/engine/config/npc-spawn-config.ts
  type NpcSpawnConfiguration (line 5) | interface NpcSpawnConfiguration {
  class NpcSpawn (line 14) | class NpcSpawn {
    method constructor (line 20) | public constructor(npcKey: string, spawnPosition: Position, movementRa...
  function translateNpcSpawnConfig (line 28) | function translateNpcSpawnConfig(config: NpcSpawnConfiguration): NpcSpawn {
  function loadNpcSpawnConfigurations (line 37) | async function loadNpcSpawnConfigurations(path: string): Promise<NpcSpaw...

FILE: src/engine/config/quest-config.ts
  type QuestKey (line 6) | type QuestKey = number | 'complete';
  type QuestStageHandler (line 8) | type QuestStageHandler = {
  type QuestDialogueHandler (line 12) | type QuestDialogueHandler = {
  type QuestJournalHandler (line 16) | type QuestJournalHandler = {
  type QuestCompletion (line 20) | interface QuestCompletion {
  class PlayerQuest (line 32) | class PlayerQuest {
    method constructor (line 38) | public constructor(questId: string) {
  function questDialogueActionFactory (line 43) | function questDialogueActionFactory(

FILE: src/engine/config/shop-config.ts
  type ShopStock (line 10) | type ShopStock = { itemKey: string; amount: number; restock?: number }[];
  class Shop (line 12) | class Shop {
    method constructor (line 26) | public constructor(
    method resetShopStock (line 50) | public resetShopStock(): void {
    method getBuyFromShopPrice (line 67) | public getBuyFromShopPrice(item: ItemDetails): number {
    method getSellToShopPrice (line 109) | public getSellToShopPrice(item: ItemDetails): number {
    method isItemSoldHere (line 145) | public isItemSoldHere(itemKey: string): boolean {
    method open (line 149) | public open(player: Player): void {
    method updateCustomers (line 172) | private updateCustomers() {
    method removePlayerFromShop (line 182) | private removePlayerFromShop(player: Player) {
  type ShopConfiguration (line 191) | interface ShopConfiguration {
  function shopFactory (line 200) | function shopFactory(key: string, config: ShopConfiguration): Shop {
  function loadShopConfigurations (line 212) | async function loadShopConfigurations(path: string): Promise<{ [key: str...

FILE: src/engine/interface/interface-state.ts
  type TabType (line 7) | type TabType =
  type GameInterfaceSlot (line 22) | type GameInterfaceSlot = 'full' | 'screen' | 'chatbox' | 'tabarea';
  type WidgetOptions (line 40) | interface WidgetOptions {
  class Widget (line 51) | class Widget {
    method constructor (line 61) | public constructor(interfaceId: number, options: WidgetOptions) {
  type WidgetClosedEvent (line 75) | interface WidgetClosedEvent {
  class InterfaceState (line 84) | class InterfaceState {
    method constructor (line 92) | public constructor(player: Player) {
    method openChatOverlayWidget (line 117) | public openChatOverlayWidget(widgetId: number): void {
    method closeChatOverlayWidget (line 122) | public closeChatOverlayWidget(): void {
    method openScreenOverlayWidget (line 127) | public openScreenOverlayWidget(widgetId: number): void {
    method closeScreenOverlayWidget (line 132) | public closeScreenOverlayWidget(): void {
    method widgetClosed (line 137) | public async widgetClosed(slot: GameInterfaceSlot): Promise<WidgetClos...
    method closeWidget (line 146) | public closeWidget(slot: GameInterfaceSlot, widgetId?: number, data?: ...
    method openWidget (line 167) | public openWidget(widgetId: number, options: WidgetOptions): Widget {
    method setTab (line 189) | public setTab(type: TabType, widget: Widget | number | null): void {
    method getTab (line 213) | public getTab(type: TabType): Widget | null {
    method findWidget (line 217) | public findWidget(widgetId: number): Widget | null {
    method widgetOpen (line 228) | public widgetOpen(slot?: GameInterfaceSlot, widgetId?: number): boolean {
    method getWidget (line 241) | public getWidget(slot: GameInterfaceSlot): Widget | null {
    method closeAllSlots (line 245) | public closeAllSlots(): void {
    method showWidget (line 251) | private showWidget(widget: Widget): void {
    method closeOthers (line 292) | private closeOthers(openSlot: GameInterfaceSlot): void {
    method clearSlots (line 297) | private clearSlots(): void {
    method fullScreenWidget (line 304) | public get fullScreenWidget(): Widget | null {
    method screenWidget (line 308) | public get screenWidget(): Widget | null {
    method chatboxWidget (line 312) | public get chatboxWidget(): Widget | null {
    method tabareaWidget (line 316) | public get tabareaWidget(): Widget | null {
    method screenOverlayWidget (line 320) | public get screenOverlayWidget(): number | null {

FILE: src/engine/net/inbound-packet-handler.ts
  type InboundPacket (line 7) | interface InboundPacket {
  type PacketData (line 13) | interface PacketData {
  constant PACKET_DIRECTORY (line 21) | const PACKET_DIRECTORY = `${BUILD_DIR}/net/inbound-packets`;
  function loadPackets (line 23) | async function loadPackets(): Promise<Map<number, InboundPacket>> {
  function handlePacket (line 39) | function handlePacket(player: Player, packetId: number, packetSize: numb...

FILE: src/engine/net/inbound-packets/object-interaction.packet.ts
  type ObjectInteractionData (line 10) | interface ObjectInteractionData {
  type objectInteractionPacket (line 16) | type objectInteractionPacket = (packet: PacketData) => ObjectInteraction...

FILE: src/engine/net/isaac.ts
  class Isaac (line 1) | class Isaac {
    method constructor (line 9) | public constructor(seed: number[]) {
    method getR (line 13) | public getR(): number[] {
    method add (line 17) | public add(x: number, y: number): number {
    method reset (line 23) | public reset(): void {
    method seed (line 29) | public seed(s: number[]): void {
    method prng (line 119) | public prng(n?: number): void {
    method rand (line 151) | public rand(): number {
    method internals (line 159) | public internals(): { a: number; b: number; c: number; m: number[]; r:...

FILE: src/engine/net/outbound-packet-handler.ts
  class OutboundPacketHandler (line 21) | class OutboundPacketHandler {
    method constructor (line 29) | public constructor(player: Player) {
    method resetCamera (line 36) | public resetCamera(): void {
    method snapCameraTo (line 40) | public snapCameraTo(position: Position, height: number, speed: number,...
    method turnCameraTowards (line 46) | public turnCameraTowards(position: Position, height: number, speed: nu...
    method updateSocialSettings (line 52) | public updateSocialSettings(): void {
    method sendPrivateMessage (line 60) | public sendPrivateMessage(chatId: number, sender: Player, message: num...
    method sendProjectile (line 72) | public sendProjectile(
    method updateFriendStatus (line 100) | public updateFriendStatus(friendName: string, worldId: number): void {
    method sendFriendServerStatus (line 107) | public sendFriendServerStatus(status: 0 | 1 | 2): void {
    method playSong (line 114) | public playSong(songId: number): void {
    method playQuickSong (line 120) | public playQuickSong(songId: number, previousSongId: number): void {
    method playSound (line 128) | public playSound(soundId: number, volume: number, delay: number = 0): ...
    method playSoundAtPosition (line 137) | public playSoundAtPosition(
    method updateChunk (line 155) | public updateChunk(chunk: Chunk, chunkUpdates: ChunkUpdateItem[]): void {
    method clearChunk (line 193) | public clearChunk(chunk: Chunk): void {
    method setWorldItem (line 203) | public setWorldItem(worldItem: WorldItem, position: Position, offset: ...
    method removeWorldItem (line 214) | public removeWorldItem(worldItem: WorldItem, position: Position, offse...
    method setLocationObject (line 224) | public setLocationObject(locationObject: LandscapeObject, position: Po...
    method removeLocationObject (line 235) | public removeLocationObject(locationObject: LandscapeObject, position:...
    method updateReferencePosition (line 245) | public updateReferencePosition(position: Position): void {
    method showChatboxWidget (line 259) | public showChatboxWidget(widgetId: number): void {
    method setWidgetNpcHead (line 266) | public setWidgetNpcHead(widgetId: number, childId: number, modelId: nu...
    method setWidgetPlayerHead (line 274) | public setWidgetPlayerHead(widgetId: number, childId: number): void {
    method playWidgetAnimation (line 281) | public playWidgetAnimation(widgetId: number, childId: number, animatio...
    method showScreenAndTabWidgets (line 289) | public showScreenAndTabWidgets(widgetId: number, tabWidgetId: number):...
    method resetAllClientConfigs (line 296) | public resetAllClientConfigs(): void {
    method updateClientConfig (line 301) | public updateClientConfig(configId: number, value: number): void {
    method setWidgetModelRotationAndZoom (line 322) | public setWidgetModelRotationAndZoom(widgetId: number, childId: number...
    method updateWidgetModel1 (line 332) | public updateWidgetModel1(widgetId: number, childId: number, modelId: ...
    method updateWidgetItemModel (line 340) | public updateWidgetItemModel(widgetId: number, itemId: number, scale?:...
    method updateWidgetString (line 351) | public updateWidgetString(widgetId: number, childId: number, value: st...
    method updateWidgetColor (line 359) | public updateWidgetColor(widgetId: number, childId: number, color: num...
    method closeActiveWidgets (line 367) | public closeActiveWidgets(): void {
    method showScreenOverlayWidget (line 371) | public showScreenOverlayWidget(widgetId: number): void {
    method showStandaloneScreenWidget (line 377) | public showStandaloneScreenWidget(widgetId: number): void {
    method sendUpdateSingleWidgetItem (line 384) | public sendUpdateSingleWidgetItem(widget: { widgetId: number; containe...
    method update (line 405) | public update(packet: Packet, widget: { widgetId: number; containerId:...
    method sendUpdateAllWidgetItems (line 432) | public sendUpdateAllWidgetItems(widget: { widgetId: number; containerI...
    method sendUpdateAllWidgetItemsById (line 437) | public sendUpdateAllWidgetItemsById(widget: { widgetId: number; contai...
    method setItemOnWidget (line 445) | public setItemOnWidget(widgetId: number, childId: number, itemId: numb...
    method toggleWidgetVisibility (line 454) | public toggleWidgetVisibility(widgetId: number, childId: number, hidde...
    method moveWidgetChild (line 462) | public moveWidgetChild(widgetId: number, childId: number, offsetX: num...
    method showTabWidget (line 471) | public showTabWidget(widgetId: number): void {
    method sendTabWidget (line 477) | public sendTabWidget(tabIndex: SidebarTab, widgetId: number | null): v...
    method blinkTabIcon (line 485) | public blinkTabIcon(tabIndex: number): void {
    method showFullscreenWidget (line 491) | public showFullscreenWidget(widgetId: number, secondaryWidgetId: numbe...
    method showNumberInputDialogue (line 499) | public showNumberInputDialogue(): void {
    method showTextInputDialogue (line 504) | public showTextInputDialogue(): void {
    method showChatDialogue (line 509) | public showChatDialogue(widgetId: number): void {
    method updateCarryWeight (line 515) | public updateCarryWeight(weight: number): void {
    method showHintIcon (line 522) | public showHintIcon(iconType: 2 | 3 | 4 | 5 | 6, position: Position, o...
    method showPlayerHintIcon (line 532) | public showPlayerHintIcon(player: Player): void {
    method showNpcHintIcon (line 545) | public showNpcHintIcon(npc: Npc): void {
    method resetNpcHintIcon (line 558) | public resetNpcHintIcon(): void {
    method logout (line 571) | public logout(): void {
    method chatboxMessage (line 578) | public chatboxMessage(message: string): void {
    method consoleMessage (line 585) | public consoleMessage(message: string): void {
    method sendConsoleCommand (line 592) | public sendConsoleCommand(command: string, help: string): void {
    method updateSkill (line 599) | public updateSkill(skillId: number, level: number, exp: number): void {
    method constructMapRegion (line 608) | public constructMapRegion(mapData: ConstructedRegion): void {
    method updateCurrentMapChunk (line 681) | public updateCurrentMapChunk(): void {
    method updatePlayerOption (line 708) | public updatePlayerOption(option: string, index: number = 0, placement...
    method flushQueue (line 717) | public flushQueue(): void {
    method queue (line 731) | public queue(packet: Packet, updateTask: boolean = false): void {
    method putCameraPosition (line 742) | private putCameraPosition(packet: Packet, position: Position, height: ...
    method getChunkPositionOffset (line 750) | private getChunkPositionOffset(x: number, y: number, chunk: Chunk): nu...
    method getChunkOffset (line 756) | private getChunkOffset(chunk: Chunk): { offsetX: number; offsetY: numb...
    method strip (line 765) | private strip(packet: Packet): Buffer {
    method segment (line 772) | private segment(container: ItemContainer, start: number): { bitset: nu...

FILE: src/engine/net/packet.ts
  type PacketType (line 7) | enum PacketType {
  class Packet (line 16) | class Packet extends ByteBuffer {
    method constructor (line 20) | public constructor(packetId: number, type: PacketType = PacketType.FIX...
    method toBuffer (line 26) | public toBuffer(cipher: Isaac): Buffer {
    method packetId (line 51) | public get packetId(): number {
    method type (line 55) | public get type(): PacketType {

FILE: src/engine/plugins/content-plugin.ts
  class ContentPlugin (line 10) | class ContentPlugin {
  function loadPluginFiles (line 19) | async function loadPluginFiles(): Promise<ContentPlugin[]> {

FILE: src/engine/plugins/loader.ts
  type PluginActionHookMap (line 10) | type PluginActionHookMap = { quest?: ActionHook[] } & {
  type PluginQuestMap (line 17) | interface PluginQuestMap {
  function loadPlugins (line 33) | async function loadPlugins(): Promise<void> {

FILE: src/engine/task/impl/actor-actor-interaction-task.ts
  method constructor (line 25) | constructor(actor: TActor, otherActor: TOtherActor, walkOnStart = false) {
  method execute (line 47) | public execute() {
  method other (line 71) | protected get other(): TOtherActor | null {

FILE: src/engine/task/impl/actor-landscape-object-interaction-task.ts
  method constructor (line 25) | constructor(
  method execute (line 54) | public execute() {
  method landscapeObject (line 82) | protected get landscapeObject(): LandscapeObject | null {
  method landscapeObjectPosition (line 102) | protected get landscapeObjectPosition(): Position | null {

FILE: src/engine/task/impl/actor-task.ts
  method constructor (line 27) | constructor(
  method onStop (line 41) | public onStop(): void {
  method listenForMovement (line 55) | private listenForMovement(): void {

FILE: src/engine/task/impl/actor-teleport-task.ts
  class ActorTeleportTask (line 10) | class ActorTeleportTask<TActor extends Actor = Actor> extends ActorTask<...
    method constructor (line 17) | constructor(actor: TActor, newPosition: Position) {
    method execute (line 30) | public execute() {
    method newPosition (line 43) | protected get newPosition(): Position | null {

FILE: src/engine/task/impl/actor-walk-to-task.ts
  type WalkToTargetType (line 10) | type WalkToTargetType = LandscapeObject | Position;
  type WalkToTarget (line 15) | type WalkToTarget = WalkToTargetType | (() => WalkToTargetType);
  type ActorWalkToTask (line 25) | interface ActorWalkToTask<TActor extends Actor = Actor, TTarget extends ...
  method constructor (line 49) | constructor(
  method execute (line 82) | public execute() {
  method getTargetPosition (line 114) | private getTargetPosition(): Position {
  method atDestination (line 127) | protected get atDestination(): boolean {

FILE: src/engine/task/impl/actor-world-item-interaction-task.ts
  method constructor (line 20) | constructor(actor: TActor, worldItem: WorldItem) {
  method execute (line 36) | public execute() {
  method worldItem (line 57) | protected get worldItem(): WorldItem | null {

FILE: src/engine/task/task-scheduler.ts
  class TaskScheduler (line 10) | class TaskScheduler {
    method tick (line 24) | public tick(): void {
    method enqueue (line 58) | public enqueue(task: Task): void {
    method clear (line 94) | public clear(): void {

FILE: src/engine/task/task.test.ts
  method constructor (line 156) | constructor() {
  method execute (line 160) | public execute(): void {
  method onStop (line 164) | public onStop(): void {

FILE: src/engine/task/task.ts
  constant DEFAULT_TASK_CONFIG (line 4) | const DEFAULT_TASK_CONFIG: Required<TaskConfig> = {
  function readConfigValue (line 13) | function readConfigValue(key: keyof TaskConfig, config?: TaskConfig): any {
  type Task (line 29) | interface Task {
  method constructor (line 81) | public constructor(config?: TaskConfig) {
  method breaksOn (line 109) | public breaksOn(breakType: TaskBreakType): boolean {
  method stop (line 118) | public stop(): boolean {
  method tick (line 141) | public tick(): void {
  method isActive (line 165) | public get isActive(): boolean {

FILE: src/engine/task/types.ts
  type TaskStackType (line 6) | enum TaskStackType {
  type TaskStackGroup (line 25) | enum TaskStackGroup {
  type TaskBreakType (line 37) | enum TaskBreakType {
  type TaskConfig (line 51) | type TaskConfig = Partial<

FILE: src/engine/task/utils/_testing.ts
  function createMockTask (line 5) | function createMockTask(

FILE: src/engine/util/colors.ts
  function hexToRgb (line 1) | function hexToRgb(hex: number): { r: number; b: number; g: number } {
  function hexToHexString (line 9) | function hexToHexString(hex: number): string {
  function rgbTo16Bit (line 25) | function rgbTo16Bit(r: number, g: number, b: number): number {

FILE: src/engine/util/data.ts
  function hasValueNotNull (line 1) | function hasValueNotNull(variable: unknown): boolean {

FILE: src/engine/util/error-handling.ts
  class WidgetsClosedWarning (line 7) | class WidgetsClosedWarning extends Error {
    method constructor (line 8) | constructor() {
  class ActionsCancelledWarning (line 15) | class ActionsCancelledWarning extends Error {
    method constructor (line 16) | constructor() {
  function initErrorHandling (line 25) | function initErrorHandling(): void {

FILE: src/engine/util/files.ts
  function watchSource (line 46) | function watchSource(dir: string): Observable<void> {
  function watchForChanges (line 58) | function watchForChanges(dir: string, regex: RegExp): void {

FILE: src/engine/util/objects.ts
  function deepMerge (line 7) | function deepMerge<T>(objectA: T, objectB: T): T {

FILE: src/engine/util/queue.ts
  class Queue (line 6) | class Queue<TItem> {
    method enqueue (line 13) | public enqueue(item: TItem): void {
    method dequeue (line 21) | public dequeue(): TItem | undefined {
    method peek (line 35) | public peek(): TItem {
    method clear (line 42) | public clear(): void {
    method items (line 49) | public get items(): TItem[] {
    method length (line 56) | public get length(): number {
    method isEmpty (line 63) | public get isEmpty(): boolean {
    method isNotEmpty (line 70) | public get isNotEmpty(): boolean {

FILE: src/engine/util/strings.ts
  function getFont (line 13) | function getFont(font?: number | string) {
  type TextDecoration (line 24) | enum TextDecoration {
  function getStylingType (line 29) | function getStylingType(tag: string) {
  function wrapText (line 53) | function wrapText(text: string, maxWidth: number, font?: number | string...
  constant VALID_CHARS (line 161) | const VALID_CHARS = [
  function longToString (line 227) | function longToString(nameLong: bigint): string {
  function stringToLong (line 238) | function stringToLong(s: string): bigint {

FILE: src/engine/util/varbits.ts
  function getVarbitMorphIndex (line 11) | function getVarbitMorphIndex(varbitId, playerConfig) {

FILE: src/engine/world/actor/actor.ts
  type ActorType (line 24) | type ActorType = 'player' | 'npc';
  method constructor (line 80) | protected constructor(actorType: ActorType) {
  method enqueueTask (line 114) | public enqueueTask<T>(taskClass: new (actor: Actor, ...args: T[]) => Tas...
  method enqueueBaseTask (line 134) | public enqueueBaseTask(task: Task): void {
  method teleport (line 147) | public teleport(newPosition: Position): void {
  method clearBonuses (line 154) | public clearBonuses(): void {
  method moveBehind (line 178) | public moveBehind(target: Actor): boolean {
  method moveTo (line 204) | public moveTo(target: Actor): boolean {
  method follow (line 223) | public follow(target: Actor): void {
  method walkTo (line 249) | public walkTo(target: Actor | Position): boolean {
  method face (line 272) | public face(
  method clearFaceActor (line 304) | public clearFaceActor(): void {
  method playAnimation (line 311) | public playAnimation(animation: number | Animation | null): void {
  method stopAnimation (line 319) | public stopAnimation(): void {
  method playGraphics (line 323) | public playGraphics(graphics: number | Graphic): void {
  method stopGraphics (line 331) | public stopGraphics(): void {
  method removeItem (line 335) | public removeItem(slot: number): void {
  method removeBankItem (line 339) | public removeBankItem(slot: number): void {
  method giveItem (line 343) | public giveItem(item: number | Item): boolean {
  method giveBankItem (line 346) | public giveBankItem(item: number | Item): boolean {
  method hasItemInInventory (line 350) | public hasItemInInventory(item: number | Item): boolean {
  method hasItemInBank (line 353) | public hasItemInBank(item: number | Item): boolean {
  method hasItemOnPerson (line 357) | public hasItemOnPerson(item: number | Item): boolean {
  method canMove (line 361) | public canMove(): boolean {
  method initiateRandomMovement (line 367) | public initiateRandomMovement(): void {
  method moveSomewhere (line 385) | public moveSomewhere(): void {
  method forceMovement (line 454) | public forceMovement(direction: number, steps: number): void {
  method withinBounds (line 491) | public withinBounds(x: number, y: number): boolean {
  method init (line 498) | protected init() {
  method destroy (line 507) | protected destroy() {
  method tick (line 513) | protected tick() {
  method position (line 517) | public get position(): Position {
  method position (line 521) | public set position(value: Position) {
  method lastMapRegionUpdatePosition (line 529) | public get lastMapRegionUpdatePosition(): Position {
  method lastMapRegionUpdatePosition (line 533) | public set lastMapRegionUpdatePosition(value: Position) {
  method worldIndex (line 537) | public get worldIndex(): number {
  method worldIndex (line 541) | public set worldIndex(value: number) {
  method walkDirection (line 545) | public get walkDirection(): number {
  method walkDirection (line 549) | public set walkDirection(value: number) {
  method runDirection (line 553) | public get runDirection(): number {
  method runDirection (line 557) | public set runDirection(value: number) {
  method faceDirection (line 561) | public get faceDirection(): number {
  method faceDirection (line 565) | public set faceDirection(value: number) {
  method busy (line 569) | public get busy(): boolean {
  method busy (line 573) | public set busy(value: boolean) {
  method instance (line 577) | public get instance(): WorldInstance {
  method instance (line 581) | public set instance(value: WorldInstance | null) {
  method bonuses (line 585) | public get bonuses(): { offensive: OffensiveBonuses; defensive: Defensiv...

FILE: src/engine/world/actor/combat.ts
  type CombatStyles (line 4) | interface CombatStyles {
  type CombatStyle (line 8) | interface CombatStyle {

FILE: src/engine/world/actor/dialogue.ts
  type Emote (line 10) | enum Emote {
  type EmoteAnimation (line 35) | enum EmoteAnimation {
  function wrapDialogueText (line 119) | function wrapDialogueText(text: string, type: 'ACTOR' | 'TEXT'): string[] {
  function parseDialogueFunctionArgs (line 139) | function parseDialogueFunctionArgs(func: Function): string[] | null {
  type DialogueTree (line 163) | type DialogueTree = (Function | DialogueFunction | GoToAction)[];
  type AdditionalOptions (line 165) | interface AdditionalOptions {
  type NpcParticipant (line 171) | interface NpcParticipant {
  class DialogueFunction (line 176) | class DialogueFunction {
    method constructor (line 177) | constructor(
  type ParsedDialogueTree (line 186) | type ParsedDialogueTree = (DialogueAction | DialogueFunction | string)[];
  type DialogueAction (line 188) | interface DialogueAction {
  class GoToAction (line 193) | class GoToAction implements DialogueAction {
    method constructor (line 197) | constructor(public to: string | Function) {}
  type ActorDialogueAction (line 200) | interface ActorDialogueAction extends DialogueAction {
  type NpcDialogueAction (line 205) | interface NpcDialogueAction extends ActorDialogueAction {
  type PlayerDialogueAction (line 209) | interface PlayerDialogueAction extends ActorDialogueAction {
  type TextDialogueAction (line 213) | interface TextDialogueAction extends DialogueAction {
  type TitledTextDialogueAction (line 218) | interface TitledTextDialogueAction extends DialogueAction {
  type OptionsDialogueAction (line 223) | interface OptionsDialogueAction extends DialogueAction {
  type SubDialogueTreeAction (line 227) | interface SubDialogueTreeAction extends DialogueAction {
  function parseDialogueTree (line 232) | function parseDialogueTree(player: Player, npcParticipants: NpcParticipa...
  function runDialogueAction (line 452) | async function runDialogueAction(
  function runParsedDialogue (line 665) | async function runParsedDialogue(
  function dialogue (line 681) | async function dialogue(
  type SelectableItem (line 767) | interface SelectableItem {
  type ItemSelection (line 774) | interface ItemSelection {
  function itemSelectionDialogue (line 779) | async function itemSelectionDialogue(player: Player, type: 'COOKING' | '...

FILE: src/engine/world/actor/magic.ts
  type Magic (line 1) | interface Magic {

FILE: src/engine/world/actor/metadata.ts
  type ActorMetadata (line 13) | type ActorMetadata = {

FILE: src/engine/world/actor/npc.ts
  class Npc (line 23) | class Npc extends Actor {
    method constructor (line 52) | public constructor(npcDetails: NpcDetails | number, npcSpawn: NpcSpawn...
    method init (line 112) | public async init(): Promise<void> {
    method processDeath (line 127) | public async processDeath(assailant: Actor, defender: Actor): Promise<...
    method withinBounds (line 166) | public withinBounds(x: number, y: number): boolean {
    method kill (line 175) | public kill(respawn: boolean = true): void {
    method tick (line 188) | public async tick(): Promise<void> {
    method reset (line 197) | public async reset(): Promise<void> {
    method say (line 208) | public say(message: string): void {
    method canMove (line 215) | public canMove(): boolean {
    method playSound (line 227) | public playSound(soundId: number, volume: number): void {
    method transformInto (line 235) | public transformInto(npcKey: string): void {
    method setNewId (line 245) | public setNewId(id: number): void {
    method equals (line 250) | public equals(other: Npc): boolean {
    method position (line 258) | public set position(position: Position) {
    method position (line 269) | public get position(): Position {
    method name (line 273) | public get name(): string {
    method combatLevel (line 277) | public get combatLevel(): number {
    method movementRadius (line 281) | public get movementRadius(): number {
    method exists (line 285) | public get exists(): boolean {
    method exists (line 289) | public set exists(value: boolean) {
    method initialized (line 293) | public get initialized(): boolean {
    method instanceId (line 297) | public get instanceId(): string | null {
  function calculateNpcDrops (line 311) | function calculateNpcDrops(player: Player, npcDetails: NpcDetails): { it...
  function getRandomInt (line 349) | function getRandomInt(max, min = 1): number {

FILE: src/engine/world/actor/pathfinding.ts
  class Point (line 10) | class Point {
    method constructor (line 14) | public constructor(
    method equals (line 19) | public equals(point: Point | null): boolean {
    method x (line 37) | public get x(): number {
    method y (line 41) | public get y(): number {
    method parent (line 45) | public get parent(): Point | null {
    method parent (line 49) | public set parent(value: Point | null) {
    method cost (line 53) | public get cost(): number {
    method cost (line 57) | public set cost(value: number) {
  type PathingOptions (line 62) | interface PathingOptions {
  class Pathfinding (line 67) | class Pathfinding {
    method constructor (line 74) | public constructor(private actor: Actor) {}
    method walkTo (line 76) | public walkTo(position: Position, options: PathingOptions): void {
    method createTileMap (line 105) | public createTileMap(searchRadius: number = 8): { [key: string]: Tile } {
    method pathTo (line 122) | public pathTo(destinationX: number, destinationY: number, searchRadius...
    method canMoveTo (line 264) | public canMoveTo(origin: Position, destination: Position): boolean {
    method movementPermitted (line 396) | public movementPermitted(
    method diagonalMovementPermitted (line 423) | public diagonalMovementPermitted(
    method findLocalCornerChunk (line 447) | public findLocalCornerChunk(cornerX: number, cornerY: number, origin: ...
    method calculateCost (line 461) | private calculateCost(point: Point): void {
    method calculateCostBetween (line 480) | private calculateCostBetween(current: Point, destination: Point): numb...
    method calculateBestPoint (line 486) | private calculateBestPoint(): Point | null {
    method canPathNSEW (line 500) | private canPathNSEW(position: Position, i: number): boolean {
    method canPathDiagonally (line 507) | private canPathDiagonally(
    method instance (line 536) | private get instance(): WorldInstance {

FILE: src/engine/world/actor/player/achievements.ts
  type AchievementSeries (line 14) | enum AchievementSeries {
  type Achievement (line 19) | interface Achievement {
  function giveAchievement (line 44) | function giveAchievement(achievement: Achievement, player: Player): bool...
  function hasAchievement (line 62) | function hasAchievement(achievement: Achievement, player: Player): boole...

FILE: src/engine/world/actor/player/attack.ts
  class Attack (line 3) | class Attack {
  type AttackDamageType (line 12) | enum AttackDamageType {

FILE: src/engine/world/actor/player/cutscenes.ts
  type CameraOptions (line 7) | interface CameraOptions {
  class Cutscene (line 23) | class Cutscene {
    method constructor (line 36) | public constructor(player: Player, options?: CameraOptions) {
    method setCamera (line 48) | public setCamera(options: CameraOptions): void {
    method snapCameraTo (line 78) | public snapCameraTo(
    method lookAt (line 101) | public lookAt(lookX: number, lookY: number, height: number = 400, move...
    method endCutscene (line 113) | public endCutscene(): void {
    method cameraX (line 118) | public get cameraX(): number {
    method cameraY (line 122) | public get cameraY(): number {
    method cameraHeight (line 126) | public get cameraHeight(): number {
    method cameraMovementSpeed (line 130) | public get cameraMovementSpeed(): number {
    method cameraAcceleration (line 134) | public get cameraAcceleration(): number {
    method lookX (line 138) | public get lookX(): number {
    method lookY (line 142) | public get lookY(): number {
    method lookHeight (line 146) | public get lookHeight(): number {
    method lookMovementSpeed (line 150) | public get lookMovementSpeed(): number {
    method lookAcceleration (line 154) | public get lookAcceleration(): number {

FILE: src/engine/world/actor/player/dialogue-action.ts
  type LineConstraint (line 12) | type LineConstraint = [number, number];
  type DialogueEmote (line 24) | enum DialogueEmote {
  type DialogueType (line 57) | type DialogueType = 'PLAYER' | 'NPC' | 'OPTIONS' | 'TEXT';
  type DialogueOptions (line 59) | interface DialogueOptions {
  class DialogueAction (line 69) | class DialogueAction {
    method constructor (line 72) | public constructor(private readonly p: Player) {}
    method player (line 74) | public async player(emote: DialogueEmote, lines: string[]): Promise<Di...
    method npc (line 78) | public async npc(npc: Npc | number, emote: DialogueEmote, lines: strin...
    method options (line 82) | public async options(title: string, options: string[]): Promise<Dialog...
    method dialogue (line 86) | public async dialogue(options: DialogueOptions): Promise<DialogueActio...
    method close (line 161) | public close(): void {
    method action (line 165) | public get action(): number | null {
    method action (line 169) | public set action(value: number | null) {

FILE: src/engine/world/actor/player/metadata.ts
  type PlayerMetadata (line 16) | type PlayerMetadata = {

FILE: src/engine/world/actor/player/model.ts
  type SendMessageOptions (line 4) | interface SendMessageOptions {

FILE: src/engine/world/actor/player/player-data.ts
  type Appearance (line 11) | interface Appearance {
  class PlayerSettings (line 27) | class PlayerSettings {
  type PlayerSave (line 48) | interface PlayerSave {
  function savePlayerData (line 112) | function savePlayerData(player: Player): boolean {
  function playerExists (line 154) | function playerExists(username: string): boolean {
  function loadPlayerSave (line 160) | function loadPlayerSave(username: string): PlayerSave | null {

FILE: src/engine/world/actor/player/player.ts
  type SidebarTab (line 87) | enum SidebarTab {
  type Rights (line 103) | enum Rights {
  class Player (line 112) | class Player extends Actor {
    method constructor (line 162) | public constructor(
    method init (line 198) | public async init(): Promise<void> {
    method logout (line 334) | public logout(): void {
    method save (line 366) | public save(): void {
    method privateMessageReceived (line 370) | public privateMessageReceived(fromPlayer: Player, messageBytes: number...
    method addFriend (line 374) | public addFriend(friendName: string): boolean {
    method removeFriend (line 384) | public removeFriend(friendName: string): boolean {
    method addIgnoredPlayer (line 395) | public addIgnoredPlayer(playerName: string): boolean {
    method removeIgnoredPlayer (line 413) | public removeIgnoredPlayer(playerName: string): boolean {
    method onNpcKill (line 424) | public onNpcKill(npc: Npc) {
    method chunkChanged (line 432) | public chunkChanged(chunk: Chunk): void {
    method tick (line 443) | public async tick(): Promise<void> {
    method update (line 466) | public async update(): Promise<void> {
    method reset (line 470) | public async reset(): Promise<void> {
    method getQuestPoints (line 495) | public getQuestPoints(): number {
    method getQuest (line 509) | public getQuest(questId: string): PlayerQuest {
    method hasQuestRequirement (line 525) | public hasQuestRequirement(questId: string, minimumStage: QuestKey = '...
    method setQuestProgress (line 543) | public setQuestProgress(questId: string, progress: QuestKey): void {
    method modifyWidget (line 619) | public modifyWidget(widgetId: number, options: { childId?: number; tex...
    method setSidebarWidget (line 641) | public setSidebarWidget(sidebarId: SidebarTab, widgetId: number | null...
    method playSong (line 649) | public playSong(songId: number): void {
    method playSound (line 671) | public playSound(soundId: number, volume: number = 10, delay: number =...
    method sendMessage (line 694) | public async sendMessage(messages: string | string[], options?: boolea...
    method teleport (line 732) | public teleport(newPosition: Position, updateRegion: boolean = true): ...
    method canMove (line 756) | public canMove(): boolean {
    method removeFirstItem (line 763) | public removeFirstItem(item: number | Item): number {
    method hasCoins (line 774) | public hasCoins(amount: number): number {
    method removeItem (line 778) | public removeItem(slot: number): void {
    method giveItem (line 783) | public giveItem(item: number | Item | string): boolean {
    method hasItemOnPerson (line 793) | public hasItemOnPerson(item: number | Item): boolean {
    method updateCarryWeight (line 801) | public updateCarryWeight(force: boolean = false): void {
    method settingChanged (line 815) | public settingChanged(buttonId: number): void {
    method updateBonuses (line 858) | public updateBonuses(): void {
    method sendLogMessage (line 870) | public sendLogMessage(message: string, isConsole: boolean): void {
    method sendCommandList (line 878) | public sendCommandList(commands: PlayerCommandActionHook[]): void {
    method isItemEquipped (line 904) | public isItemEquipped(item: number | Item | string): boolean {
    method getEquippedItem (line 914) | public getEquippedItem(equipmentSlot: EquipmentSlot): Item | null {
    method canEquipItem (line 926) | public canEquipItem(item: ItemDetails | string): { equipable: boolean;...
    method equipItem (line 952) | public equipItem(itemId: number, itemSlot: number, slot: EquipmentSlot...
    method equipmentChanged (line 1036) | public equipmentChanged(): void {
    method syncBonuses (line 1051) | public syncBonuses(): void {
    method unequipItem (line 1073) | public unequipItem(slot: EquipmentSlot | number, updateRequired: boole...
    method transformInto (line 1108) | public transformInto(npc: NpcDetails | string | number | null): void {
    method getMorphedNpcDetails (line 1140) | public getMorphedNpcDetails(originalNpc: Npc) {
    method equals (line 1161) | public equals(player: Player): boolean {
    method inventoryUpdated (line 1165) | private inventoryUpdated(event: ContainerUpdateEvent): void {
    method sendChunkUpdates (line 1182) | private sendChunkUpdates(chunks: Chunk[]): void {
    method findChunkUpdates (line 1208) | private findChunkUpdates(chunkMods: Map<string, TileModifications>, ch...
    method updateQuestTab (line 1229) | private updateQuestTab(): void {
    method updateMusicTab (line 1259) | private updateMusicTab(): void {
    method addBonuses (line 1282) | private addBonuses(item: Item): void {
    method loadSaveData (line 1310) | private loadSaveData(): void {
    method position (line 1378) | public set position(position: Position) {
    method position (line 1389) | public get position(): Position {
    method socket (line 1393) | public get socket(): Socket {
    method inCipher (line 1397) | public get inCipher(): Isaac {
    method outCipher (line 1401) | public get outCipher(): Isaac {
    method outgoingPackets (line 1405) | public get outgoingPackets(): OutboundPacketHandler {
    method loginDate (line 1409) | public get loginDate(): Date {
    method lastAddress (line 1413) | public get lastAddress(): string {
    method rights (line 1417) | public get rights(): Rights {
    method appearance (line 1421) | public get appearance(): Appearance {
    method appearance (line 1425) | public set appearance(value: Appearance) {
    method equipment (line 1429) | public get equipment(): ItemContainer {
    method carryWeight (line 1433) | public get carryWeight(): number {
    method settings (line 1437) | public get settings(): PlayerSettings {
    method nearbyChunks (line 1441) | public get nearbyChunks(): Chunk[] {
    method instance (line 1445) | public get instance(): WorldInstance {
    method instance (line 1449) | public set instance(value: WorldInstance | null) {

FILE: src/engine/world/actor/player/private-messaging.ts
  type PrivateChatMode (line 4) | enum PrivateChatMode {
  class PrivateMessaging (line 10) | class PrivateMessaging {
    method friendAdded (line 11) | public static friendAdded(player: Player, friendName: string): void {
    method friendRemoved (line 16) | public static friendRemoved(player: Player, friendName: string): void {
    method updateFriendsList (line 33) | public static updateFriendsList(player: Player): void {
    method playerPrivateChatModeChanged (line 62) | public static playerPrivateChatModeChanged(player: Player, updating: b...
    method playerLoggedIn (line 85) | public static playerLoggedIn(player: Player): void {

FILE: src/engine/world/actor/player/quest.ts
  class Quest (line 3) | class Quest {
    method constructor (line 11) | public constructor(options: {

FILE: src/engine/world/actor/player/sync/actor-sync.ts
  function registerNewActors (line 15) | function registerNewActors(
  function syncTrackedActors (line 80) | function syncTrackedActors(
  function appendMovement (line 131) | function appendMovement(actor: Actor, packet: ByteBuffer): void {

FILE: src/engine/world/actor/player/sync/npc-sync-task.ts
  class NpcSyncTask (line 13) | class NpcSyncTask extends SyncTask<void> {
    method constructor (line 16) | public constructor(player: Player) {
    method execute (line 21) | public async execute(): Promise<void> {
    method appendUpdateMaskData (line 94) | private appendUpdateMaskData(npc: Npc, updateMaskData: ByteBuffer): vo...

FILE: src/engine/world/actor/player/sync/player-sync-task.ts
  class PlayerSyncTask (line 16) | class PlayerSyncTask extends SyncTask<void> {
    method constructor (line 19) | public constructor(player: Player) {
    method execute (line 24) | public async execute(): Promise<void> {
    method appendUpdateMaskData (line 107) | private appendUpdateMaskData(player: Player, updateMaskData: ByteBuffe...
    method appendBasicAppearanceItem (line 340) | private appendBasicAppearanceItem(buffer: ByteBuffer, player: Player, ...

FILE: src/engine/world/actor/prayer.ts
  class Prayer (line 1) | class Prayer {

FILE: src/engine/world/actor/skills.ts
  type Skill (line 9) | enum Skill {
  type SkillName (line 34) | type SkillName =
  type SkillDetail (line 58) | interface SkillDetail {
  type SkillValue (line 89) | interface SkillValue {
  class SkillShortcut (line 95) | class SkillShortcut {
    method constructor (line 96) | public constructor(
    method addExp (line 101) | public addExp(exp: number): void {
    method level (line 105) | public set level(value: number) {
    method level (line 109) | public get level(): number {
    method exp (line 113) | public set exp(value: number) {
    method exp (line 117) | public get exp(): number {
    method levelForExp (line 121) | public get levelForExp(): number {
  type SkillShortcutMap (line 126) | type SkillShortcutMap = {
  class SkillShortcuts (line 130) | class SkillShortcuts implements SkillShortcutMap {
  class Skills (line 155) | class Skills extends SkillShortcuts {
    method constructor (line 172) | public constructor(
    method confine (line 189) | private static confine(value: number, min: number, max: number): number {
    method setHitpoints (line 193) | public setHitpoints(hitpoints: number): void {
    method getTotalLevel (line 197) | public getTotalLevel(): number {
    method getCombatLevel (line 201) | public getCombatLevel(): number {
    method getLevel (line 209) | public getLevel(skill: number | SkillName, ignoreLevelModifications: b...
    method hasLevel (line 214) | public hasLevel(skill: number | SkillName, level: number, ignoreLevelM...
    method getLevelForExp (line 218) | public getLevelForExp(exp: number, index: number | undefined = undefin...
    method getExpForLevel (line 229) | public getExpForLevel(level: number): number {
    method addExp (line 234) | public addExp(skill: number | SkillName, exp: number): void {
    method showLevelUpDialogue (line 291) | public showLevelUpDialogue(skill: number | SkillName, level: number): ...
    method getSkillId (line 325) | public getSkillId(skill: number | SkillName): number {
    method get (line 334) | public get(skill: number | SkillName): SkillValue {
    method setExp (line 343) | public setExp(skill: number | SkillName, exp: number): void {
    method setLevel (line 348) | public setLevel(skill: number | SkillName, level: number): void {
    method defaultValues (line 353) | private defaultValues(): SkillValue[] {
    method values (line 360) | public get values(): SkillValue[] {
    method values (line 364) | public set values(value: SkillValue[]) {

FILE: src/engine/world/actor/update-flags.ts
  type ChatMessage (line 7) | interface ChatMessage {
  type Graphic (line 17) | interface Graphic {
  type Animation (line 26) | interface Animation {
  type DamageType (line 31) | enum DamageType {
  type Damage (line 40) | interface Damage {
  class UpdateFlags (line 50) | class UpdateFlags {
    method constructor (line 60) | public constructor() {
    method reset (line 65) | public reset(): void {
    method addDamage (line 79) | public addDamage(amount: number, type: DamageType, remainingHitpoints:...
    method addChatMessage (line 88) | public addChatMessage(chatMessage: ChatMessage): void {
    method updateBlockRequired (line 100) | public get updateBlockRequired(): boolean {
    method mapRegionUpdateRequired (line 112) | public get mapRegionUpdateRequired(): boolean {
    method mapRegionUpdateRequired (line 116) | public set mapRegionUpdateRequired(value: boolean) {
    method appearanceUpdateRequired (line 120) | public get appearanceUpdateRequired(): boolean {
    method appearanceUpdateRequired (line 124) | public set appearanceUpdateRequired(value: boolean) {
    method chatMessages (line 128) | public get chatMessages(): ChatMessage[] {
    method chatMessages (line 132) | public set chatMessages(value: ChatMessage[]) {
    method facePosition (line 136) | public get facePosition(): Position | null {
    method facePosition (line 140) | public set facePosition(value: Position | null) {
    method faceActor (line 144) | public get faceActor(): Actor | 'CLEAR' | null {
    method faceActor (line 148) | public set faceActor(value: Actor | 'CLEAR' | null) {
    method graphics (line 152) | public get graphics(): Graphic | null {
    method graphics (line 156) | public set graphics(value: Graphic | null) {
    method animation (line 160) | public get animation(): Animation | null {
    method animation (line 164) | public set animation(value: Animation | null) {
    method damage (line 168) | public get damage(): Damage | null {
    method damage (line 172) | public set damage(value: Damage | null) {

FILE: src/engine/world/actor/walking-queue.ts
  class WalkingQueue (line 11) | class WalkingQueue {
    method constructor (line 20) | public constructor(private readonly actor: Actor) {
    method moving (line 25) | public moving(): boolean {
    method clear (line 29) | public clear(): void {
    method getLastPosition (line 33) | public getLastPosition(): Position {
    method add (line 41) | public add(x: number, y: number, positionMetadata?: { [key: string]: a...
    method moveIfAble (line 95) | public moveIfAble(xDiff: number, yDiff: number): boolean {
    method resetDirections (line 109) | public resetDirections(): void {
    method calculateDirection (line 114) | public calculateDirection(diffX: number, diffY: number): number {
    method process (line 142) | public process(): void {
    method valid (line 244) | get valid(): boolean {
    method valid (line 248) | set valid(value: boolean) {

FILE: src/engine/world/config/examine-data.ts
  type Examine (line 5) | interface Examine {
  class ExamineCache (line 10) | class ExamineCache {
    method constructor (line 15) | public constructor() {
    method getItem (line 22) | public getItem(id: number): string | null {
    method getNpc (line 27) | public getNpc(id: number): string | null {
    method getObject (line 32) | public getObject(id: number): string | null {
  function parseData (line 38) | function parseData(fileName: string): Map<number, Examine> {

FILE: src/engine/world/config/harvest-tool.ts
  type HarvestTool (line 4) | interface HarvestTool {
  type Pickaxe (line 10) | enum Pickaxe {
  type Axe (line 19) | enum Axe {
  function getBestPickaxe (line 53) | function getBestPickaxe(player: Player): HarvestTool | null {
  function getBestAxe (line 68) | function getBestAxe(player: Player): HarvestTool | null {
  function getPickaxe (line 79) | function getPickaxe(pickaxe: Pickaxe): HarvestTool {
  function getAxe (line 83) | function getAxe(axe: Axe): HarvestTool {

FILE: src/engine/world/config/harvestable-object.ts
  type WeightedItem (line 4) | interface WeightedItem {
  type IHarvestable (line 9) | interface IHarvestable {
  constant CLAY_OBJECTS (line 21) | const CLAY_OBJECTS: Map<number, number> = new Map<number, number>([...ob...
  constant COPPER_OBJECTS (line 26) | const COPPER_OBJECTS: Map<number, number> = new Map<number, number>([
  constant TIN_OBJECTS (line 30) | const TIN_OBJECTS: Map<number, number> = new Map<number, number>([...obj...
  constant IRON_OBJECTS (line 35) | const IRON_OBJECTS: Map<number, number> = new Map<number, number>([...ob...
  constant COAL_OBJECTS (line 40) | const COAL_OBJECTS: Map<number, number> = new Map<number, number>([...ob...
  constant SILVER_OBJECTS (line 45) | const SILVER_OBJECTS: Map<number, number> = new Map<number, number>([
  constant GOLD_OBJECTS (line 49) | const GOLD_OBJECTS: Map<number, number> = new Map<number, number>([...ob...
  constant MITHRIL_OBJECTS (line 54) | const MITHRIL_OBJECTS: Map<number, number> = new Map<number, number>([
  constant ADAMANT_OBJECTS (line 58) | const ADAMANT_OBJECTS: Map<number, number> = new Map<number, number>([
  constant RUNITE_OBJECTS (line 62) | const RUNITE_OBJECTS: Map<number, number> = new Map<number, number>([
  constant NORMAL_OBJECTS (line 66) | const NORMAL_OBJECTS: Map<number, number> = new Map<number, number>([
  constant ACHEY_OBJECTS (line 71) | const ACHEY_OBJECTS: Map<number, number> = new Map<number, number>([...o...
  constant OAK_OBJECTS (line 76) | const OAK_OBJECTS: Map<number, number> = new Map<number, number>([...obj...
  constant WILLOW_OBJECTS (line 81) | const WILLOW_OBJECTS: Map<number, number> = new Map<number, number>([......
  constant TEAK_OBJECTS (line 86) | const TEAK_OBJECTS: Map<number, number> = new Map<number, number>([...ob...
  constant DRAMEN_OBJECTS (line 91) | const DRAMEN_OBJECTS: Map<number, number> = new Map<number, number>([......
  constant MAPLE_OBJECTS (line 96) | const MAPLE_OBJECTS: Map<number, number> = new Map<number, number>([...o...
  constant HOLLOW_OBJECTS (line 101) | const HOLLOW_OBJECTS: Map<number, number> = new Map<number, number>([......
  constant MAHOGANY_OBJECTS (line 106) | const MAHOGANY_OBJECTS: Map<number, number> = new Map<number, number>([
  constant YEW_OBJECTS (line 110) | const YEW_OBJECTS: Map<number, number> = new Map<number, number>([...obj...
  constant MAGIC_OBJECTS (line 115) | const MAGIC_OBJECTS: Map<number, number> = new Map<number, number>([...o...
  type Ore (line 120) | enum Ore {
  type Tree (line 135) | enum Tree {
  function selectWeightedItem (line 149) | function selectWeightedItem(items: WeightedItem[]): string {
  function getOre (line 417) | function getOre(ore: Ore): IHarvestable {
  function getOreFromRock (line 421) | function getOreFromRock(id: number): IHarvestable {
  function getTreeFromHealthy (line 425) | function getTreeFromHealthy(id: number): IHarvestable {
  function getOreFromDepletedRock (line 429) | function getOreFromDepletedRock(id: number): IHarvestable {
  function getAllOreIds (line 440) | function getAllOreIds(): number[] {
  function getTreeIds (line 451) | function getTreeIds(): number[] {

FILE: src/engine/world/config/scenery-spawns.ts
  function parseScenerySpawns (line 6) | function parseScenerySpawns(): LandscapeObject[] {

FILE: src/engine/world/config/travel-locations.ts
  type RawTravelLocation (line 5) | interface RawTravelLocation {
  type TravelLocation (line 11) | interface TravelLocation {
  class TravelLocations (line 30) | class TravelLocations {
    method constructor (line 33) | public constructor() {
    method find (line 37) | public find(search: string): TravelLocation | null {

FILE: src/engine/world/config/widget.ts
  type PlayerWidget (line 23) | interface PlayerWidget {

FILE: src/engine/world/direction.ts
  type DirectionData (line 1) | interface DirectionData {
  type Direction (line 11) | type Direction = 'NORTH' | 'SOUTH' | 'EAST' | 'WEST' | 'NORTHEAST' | 'NO...
  constant WNES (line 62) | const WNES: Direction[] = ['WEST', 'NORTH', 'EAST', 'SOUTH'];

FILE: src/engine/world/instances.ts
  type ItemSpawnConfig (line 15) | interface ItemSpawnConfig {
  type InstancedChunk (line 35) | interface InstancedChunk {
  class TileModifications (line 50) | class TileModifications {
    method empty (line 69) | public get empty(): boolean {
  class WorldInstance (line 77) | class WorldInstance {
    method constructor (line 92) | public constructor(public readonly instanceId: string) {}
    method spawnWorldItem (line 101) | public spawnWorldItem(item: Item | number, position: Position, config?...
    method despawnWorldItem (line 165) | public despawnWorldItem(worldItem: WorldItem): void {
    method respawnItem (line 197) | public async respawnItem(worldItem: WorldItem): Promise<void> {
    method worldItemAdded (line 226) | public worldItemAdded(worldItem: WorldItem, excludePlayer?: Player): v...
    method worldItemRemoved (line 242) | public worldItemRemoved(worldItem: WorldItem): void {
    method hideGameObjectTemporarily (line 253) | public async hideGameObjectTemporarily(object: LandscapeObject, hideTi...
    method spawnTemporaryGameObject (line 265) | public async spawnTemporaryGameObject(object: LandscapeObject, positio...
    method toggleGameObjects (line 279) | public toggleGameObjects(newObject: LandscapeObject, oldObject: Landsc...
    method replaceGameObject (line 299) | public async replaceGameObject(newObject: LandscapeObject | number, ol...
    method spawnGameObject (line 327) | public spawnGameObject(object: LandscapeObject, reference: boolean = f...
    method despawnGameObject (line 349) | public despawnGameObject(object: LandscapeObject): void {
    method hideGameObject (line 382) | public hideGameObject(object: LandscapeObject): void {
    method showGameObject (line 400) | public showGameObject(object: LandscapeObject): void {
    method getInstancedChunk (line 444) | public getInstancedChunk(worldPositionOrX: Position | number, y?: numb...
    method getTileModifications (line 489) | public getTileModifications(worldPosition: Position): { chunk: Instanc...
    method addPlayer (line 506) | public addPlayer(player: Player): void {
    method removePlayer (line 516) | public removePlayer(player: Player): void {
    method clearTileIfEmpty (line 532) | private clearTileIfEmpty(worldPosition: Position): void {

FILE: src/engine/world/items/item-container.ts
  type ContainerUpdateEvent (line 9) | interface ContainerUpdateEvent {
  type InventoryMapType (line 33) | type InventoryMapType = (Item | null)[];
  class ItemContainer (line 35) | class ItemContainer {
    method constructor (line 40) | public constructor(size: number) {
    method clear (line 50) | public clear(fireEvent: boolean = true): void {
    method has (line 58) | public has(item: number | Item): boolean {
    method amount (line 62) | public amount(item: number | Item): number {
    method findAll (line 74) | public findAll(search: number | Item): number[] {
    method findIndex (line 111) | public findIndex(item: number | Item): number {
    method setAll (line 116) | public setAll(items: (Item | null)[], fireEvent: boolean = true): void {
    method set (line 126) | public set(slot: number, item: Item | null, fireEvent: boolean = true)...
    method findItemIndex (line 133) | public findItemIndex(item: Item): number {
    method add (line 149) | public add(item: number | string | Item, fireEvent: boolean = true): {...
    method addStacking (line 203) | public addStacking(item: number | Item, fireEvent: boolean = true): { ...
    method amountInStack (line 243) | public amountInStack(slot: number): number {
    method removeFirst (line 247) | public removeFirst(item: number | Item, fireEvent: boolean = true): nu...
    method remove (line 262) | public remove(slot: number, fireEvent: boolean = true): Item | null {
    method getFirstOpenSlot (line 272) | public getFirstOpenSlot(): number {
    method hasSpace (line 276) | public hasSpace(): boolean {
    method getOpenSlotCount (line 280) | public getOpenSlotCount(): number {
    method getOpenSlots (line 291) | public getOpenSlots(): number[] {
    method swap (line 303) | public swap(fromSlot: number, toSlot: number): void {
    method weight (line 311) | public weight(): number {
    method canFit (line 331) | public canFit(item: Item, everythingStacks: boolean = false): boolean {
    method size (line 348) | public get size(): number {
    method items (line 352) | public get items(): (Item | null)[] {
    method containerUpdated (line 356) | public get containerUpdated(): Subject<ContainerUpdateEvent> {

FILE: src/engine/world/items/item.ts
  type Item (line 5) | interface Item {
  function itemInventoryOptions (line 10) | function itemInventoryOptions(itemId: number): string[] {
  function IsParentWidget (line 19) | function IsParentWidget(widget: WidgetBase): widget is ParentWidget {
  function IsStaticItemWidget (line 24) | function IsStaticItemWidget(widget: WidgetBase): widget is StaticItemWid...
  function parseItemId (line 71) | function parseItemId(item: number | Item): number {
  function toNote (line 75) | function toNote(item: number | Item): number {
  function fromNote (line 89) | function fromNote(item: number | Item): number {

FILE: src/engine/world/items/world-item.ts
  type WorldItem (line 5) | type WorldItem = {

FILE: src/engine/world/map/chunk-manager.ts
  class Tile (line 7) | class Tile {
    method constructor (line 12) | public constructor(
    method setSettings (line 23) | public setSettings(settings: number): void {
  type MapRegion (line 30) | interface MapRegion {
  class ChunkManager (line 38) | class ChunkManager {
    method constructor (line 42) | public constructor() {
    method getTile (line 46) | public getTile(position: Position): Tile {
    method registerMapRegion (line 80) | public registerMapRegion(mapRegionX: number, mapRegionY: number): void {
    method registerObjects (line 119) | public registerObjects(objects: LandscapeObject[], mapFile: MapFile): ...
    method getSurroundingChunks (line 143) | public getSurroundingChunks(chunk: Chunk): Chunk[] {
    method getRegionIdForWorldPosition (line 163) | public getRegionIdForWorldPosition(position: Position): number {
    method getChunkForWorldPosition (line 167) | public getChunkForWorldPosition(position: Position): Chunk {
    method getChunk (line 171) | public getChunk(position: Position | { x: number; y: number; level: nu...

FILE: src/engine/world/map/chunk.ts
  type CustomLandscapeObject (line 9) | interface CustomLandscapeObject {
  type ChunkUpdateItem (line 13) | interface ChunkUpdateItem {
  class Chunk (line 22) | class Chunk {
    method constructor (line 29) | public constructor(position: Position) {
    method registerMapRegion (line 37) | public registerMapRegion(): void {
    method setFilestoreLandscapeObject (line 43) | public setFilestoreLandscapeObject(landscapeObject: LandscapeObject): ...
    method addPlayer (line 48) | public addPlayer(player: Player): void {
    method removePlayer (line 54) | public removePlayer(player: Player): void {
    method addNpc (line 61) | public addNpc(npc: Npc): void {
    method removeNpc (line 67) | public removeNpc(npc: Npc): void {
    method getFilestoreLandscapeObject (line 74) | public getFilestoreLandscapeObject(objectId: number, position: Positio...
    method equals (line 78) | public equals(chunk: Chunk): boolean {
    method position (line 82) | public get position(): Position {
    method players (line 86) | public get players(): Player[] {
    method npcs (line 90) | public get npcs(): Npc[] {
    method collisionMap (line 94) | public get collisionMap(): CollisionMap {
    method filestoreLandscapeObjects (line 98) | public get filestoreLandscapeObjects(): Map<string, LandscapeObject> {

FILE: src/engine/world/map/collision-map.ts
  class CollisionMap (line 11) | class CollisionMap {
    method constructor (line 23) | public constructor(x: number, y: number, heightLevel: number, options?...
    method markGameObject (line 40) | public markGameObject(landscapeObject: LandscapeObject, mark: boolean)...
    method reset (line 77) | public reset(): void {
    method markWall (line 85) | public markWall(x: number, y: number, type: number, rotation: number, ...
    method unmarkWall (line 209) | public unmarkWall(x: number, y: number, position: number, rotation: nu...
    method markSolidOccupant (line 332) | public markSolidOccupant(
    method markBlocked (line 366) | public markBlocked(x: number, y: number, mark: boolean): void {
    method set (line 383) | public set(x: number, y: number, flag: number): void {
    method unset (line 420) | public unset(x: number, y: number, flag: number): void {
    method getSiblingCollisionMap (line 449) | public getSiblingCollisionMap(offsetX: number, offsetY: number): Colli...
    method insetX (line 465) | public get insetX(): number {
    method insetY (line 469) | public get insetY(): number {
    method adjacency (line 473) | public get adjacency(): (number | null)[][] {

FILE: src/engine/world/map/landscape-object.ts
  type ModifiedLandscapeObject (line 3) | interface ModifiedLandscapeObject extends LandscapeObject {

FILE: src/engine/world/map/region.ts
  type RegionType (line 8) | type RegionType = 'mapfile' | 'region' | 'chunk';
  type RegionSizeMap (line 13) | type RegionSizeMap = {
  method constructor (line 29) | protected constructor(rotation: number = 0) {
  method templatePosition (line 35) | public get templatePosition(): Position {
  type ConstructedRegion (line 40) | interface ConstructedRegion {

FILE: src/engine/world/position.ts
  class Coords (line 13) | class Coords {
    method equals (line 18) | static equals(a: Coords, b: Coords): boolean {
  class Position (line 26) | class Position {
    method constructor (line 35) | public constructor(arg0: number | Coords | Position, y?: number, level...
    method clone (line 44) | public clone(): Position {
    method withinInteractionDistance (line 51) | public withinInteractionDistance(target: LandscapeObject | Position, m...
    method withinViewDistance (line 99) | public withinViewDistance(position: Position): boolean {
    method within (line 116) | public within(min: Position, max: Position, checkPlane: boolean = true...
    method move (line 124) | public move(x: number, y: number, level?: number): Position {
    method equalsIgnoreLevel (line 137) | public equalsIgnoreLevel(position: Position | { x: number; y: number }...
    method distanceBetween (line 145) | public distanceBetween(other: Position): number {
    method fromDirection (line 149) | public fromDirection(direction: number): Position {
    method step (line 153) | public step(steps: number, direction: Direction): Position {
    method copy (line 157) | public copy(): Position {
    method equals (line 161) | public equals(position: Position | { x: number; y: number; level: numb...
    method calculateChunkLocalX (line 169) | public calculateChunkLocalX(position: Position): number {
    method calculateChunkLocalY (line 173) | public calculateChunkLocalY(position: Position): number {
    method setX (line 181) | public setX(x: number): Position {
    method setY (line 190) | public setY(y: number): Position {
    method setLevel (line 199) | public setLevel(plane: number): Position {
    method coords (line 207) | public get coords(): Coords {
    method chunkX (line 215) | public get chunkX(): number {
    method chunkY (line 219) | public get chunkY(): number {
    method chunkLocalX (line 223) | public get chunkLocalX(): number {
    method chunkLocalY (line 227) | public get chunkLocalY(): number {
    method localX (line 231) | public get localX(): number {
    method localY (line 235) | public get localY(): number {
    method x (line 239) | public get x(): number {
    method x (line 243) | public set x(value: number) {
    method y (line 247) | public get y(): number {
    method y (line 251) | public set y(value: number) {
    method level (line 255) | public get level(): number {
    method level (line 259) | public set level(value: number) {
    method key (line 263) | public get key(): string {

FILE: src/engine/world/skill-util/glory-boost.ts
  function checkForGemBoost (line 5) | function checkForGemBoost(player: Player): number {

FILE: src/engine/world/skill-util/harvest-roll.ts
  function rollBirdsNestType (line 6) | function rollBirdsNestType(): Item {
  function rollGemType (line 33) | function rollGemType(): Item {

FILE: src/engine/world/skill-util/harvest-skill.ts
  function canInitiateHarvest (line 15) | function canInitiateHarvest(player: Player, target: IHarvestable, skill:...

FILE: src/engine/world/sound/music.ts
  type MusicPlayerMode (line 1) | enum MusicPlayerMode {
  type MusicPlayerLoopMode (line 6) | enum MusicPlayerLoopMode {
  type MusicTabButtonIds (line 11) | enum MusicTabButtonIds {

FILE: src/engine/world/world.ts
  type QuadtreeKey (line 31) | interface QuadtreeKey {
  class World (line 40) | class World {
    method constructor (line 59) | public constructor() {
    method startup (line 73) | public async startup(): Promise<void> {
    method shutdown (line 81) | public shutdown(): void {
    method enqueueTask (line 95) | public enqueueTask(task: Task): void {
    method findObjectAtLocation (line 105) | public findObjectAtLocation(
    method findCustomMapObject (line 187) | public findCustomMapObject(actor: Actor, objectId: number, objectPosit...
    method kickAllPlayers (line 265) | public kickAllPlayers(): void {
    method saveOnlinePlayers (line 280) | public saveOnlinePlayers(): void {
    method playLocationSound (line 299) | public playLocationSound(position: Position, instanceId: string, sound...
    method findNearbyNpcsById (line 313) | public findNearbyNpcsById(
    method findNpcsByKey (line 335) | public findNpcsByKey(npcKey: string, instanceId: string = activeWorld....
    method findNpcsById (line 344) | public findNpcsById(npcId: number, instanceId: string = activeWorld.gl...
    method findNpcsByInstance (line 352) | public findNpcsByInstance(instanceId: string): Npc[] {
    method findNearbyNpcs (line 362) | public findNearbyNpcs(position: Position, distance: number, instanceId...
    method findNearbyPlayers (line 380) | public findNearbyPlayers(position: Position, distance: number, instanc...
    method findActivePlayerByUsername (line 396) | public findActivePlayerByUsername(username: string): Player | null {
    method spawnWorldItems (line 405) | public spawnWorldItems(player?: Player): void {
    method spawnGlobalNpcs (line 423) | public spawnGlobalNpcs(): void {
    method spawnNpc (line 430) | public async spawnNpc(
    method spawnScenery (line 451) | public spawnScenery(): void {
    method setupWorldTick (line 455) | public async setupWorldTick(): Promise<void> {
    method generateFakePlayers (line 460) | public generateFakePlayers(): void {
    method worldTick (line 493) | public async worldTick(): Promise<void> {
    method nextTick (line 525) | public async nextTick(): Promise<void> {
    method ticks (line 529) | public async ticks(count: number): Promise<void> {
    method scheduleNpcRespawn (line 533) | public async scheduleNpcRespawn(npc: Npc): Promise<boolean> {
    method playerSlotsRemaining (line 541) | public playerSlotsRemaining(): number {
    method findPlayer (line 545) | public findPlayer(playerUsername: string): Player | null {
    method playerOnline (line 550) | public playerOnline(player: Player | string): boolean {
    method registerPlayer (line 569) | public registerPlayer(player: Player): boolean {
    method deregisterPlayer (line 590) | public deregisterPlayer(player: Player): void {
    method npcExists (line 594) | public npcExists(npc: Npc): boolean {
    method registerNpc (line 603) | public async registerNpc(npc: Npc): Promise<boolean> {
    method deregisterNpc (line 621) | public deregisterNpc(npc: Npc): void {

FILE: src/plugins/buttons/magic-attack.plugin.ts
  function attack_target (line 10) | function attack_target(player: Player, elapsedTicks: number): boolean {

FILE: src/plugins/buttons/magic-teleports.plugin.ts
  type Teleports (line 18) | enum Teleports {
  function queueTeleport (line 127) | function queueTeleport(player: Player, pos: Position) {
  function homeTeleport (line 154) | function homeTeleport(player: Player, elapsedTicks: number): boolean {
  type MagicCost (line 182) | type MagicCost = Record<number, number>;
  function hasInfinite (line 190) | function hasInfinite(player: Player, resource: number): boolean {
  function expenseMagic (line 226) | function expenseMagic(player: Player, cost: MagicCost): boolean {
  function genericTeleport (line 267) | function genericTeleport(player: Player, elapsedTicks: number, target: P...

FILE: src/plugins/buttons/player-emotes.plugin.ts
  type Emote (line 6) | interface Emote {
  type SkillcapeEmote (line 13) | interface SkillcapeEmote extends Emote {
  function unlockEmote (line 100) | function unlockEmote(player: Player, emoteName: string): void {
  function lockEmote (line 109) | function lockEmote(player: Player, emoteName: string): void {
  function unlockEmotes (line 121) | function unlockEmotes(player: Player): void {

FILE: src/plugins/combat/combat-styles.plugin.ts
  function updateCombatStyle (line 13) | function updateCombatStyle(player: Player, weaponStyle: WeaponStyle, sty...
  function showUnarmed (line 23) | function showUnarmed(player: Player): void {
  function setWeaponWidget (line 36) | function setWeaponWidget(player: Player, weaponStyle: WeaponStyle, itemD...
  function updateCombatStyleWidget (line 44) | function updateCombatStyleWidget(player: Player): void {

FILE: src/plugins/items/herblore/clean-herb.ts
  type IGrimyHerb (line 7) | interface IGrimyHerb {

FILE: src/plugins/items/move-item.plugin.ts
  type WidgetDetail (line 6) | type WidgetDetail = [number, number, (player: Player) => ItemContainer];
  function moveItem (line 13) | function moveItem(

FILE: src/plugins/items/rotten-potato/helpers/rotten-potato-travel.ts
  constant INTRO_PAGE_COUNT (line 5) | const INTRO_PAGE_COUNT = 1;
  constant ITEMS_PER_PAGE (line 6) | const ITEMS_PER_PAGE = 15;
  function openTravel (line 9) | function openTravel(player: Player, page: number) {

FILE: src/plugins/items/rotten-potato/hooks/rotten-potato-eat.ts
  type DialogueOption (line 4) | enum DialogueOption {

FILE: src/plugins/items/rotten-potato/hooks/rotten-potato-peel.ts
  function openBank (line 10) | function openBank(player: Player) {
  type DialogueOption (line 37) | enum DialogueOption {

FILE: src/plugins/items/shopping/buy-from-shop.plugin.ts
  function removeCoins (line 9) | function removeCoins(inventory: ItemContainer, coinsIndex: number, cost:...

FILE: src/plugins/items/swap-items.plugin.ts
  type WidgetDetail (line 6) | type WidgetDetail = [number, number, (player: Player) => ItemContainer];
  function swapItems (line 15) | function swapItems(container: ItemContainer, fromSlot: number, toSlot: n...

FILE: src/plugins/music/music-regions.plugin.ts
  function getByValue (line 8) | function getByValue(map, searchValue) {

FILE: src/plugins/npcs/falador/custom-guards.plugin.ts
  type DialogueNpcTree (line 12) | interface DialogueNpcTree {
  function startIdleDialogueTree (line 128) | function startIdleDialogueTree(npc: Npc, closeNpc: Npc, dialogueTree: Di...
  function doDialogue (line 138) | function doDialogue(a: Npc, b: Npc, dialogueIndex: number, dialogueTree:...

FILE: src/plugins/objects/cows/cow.plugin.ts
  function milkCow (line 12) | function milkCow(details: { objectConfig: ObjectConfig; player: Player }...

FILE: src/plugins/objects/ladders/ladder.plugin.ts
  method constructor (line 37) | constructor(actor: Actor) {
  method execute (line 41) | execute() {

FILE: src/plugins/objects/mill/flour-bin.plugin.ts
  function flourBin (line 9) | function flourBin(details: { objectConfig: ObjectConfig; player: Player ...

FILE: src/plugins/quests/cooks-assistant-quest.plugin.ts
  function dialogueIngredientQuestions (line 59) | function dialogueIngredientQuestions(): Function {
  function youStillNeed (line 188) | function youStillNeed(quest: PlayerQuest): DialogueTree {

FILE: src/plugins/quests/goblin-diplomacy-tutorial/goblin-diplomacy-quest.plugin.ts
  function showTabWidgetHint (line 37) | function showTabWidgetHint(
  function unlockAvailableTabs (line 66) | function unlockAvailableTabs(player: Player, availableTabs?: number): vo...
  function npcHint (line 84) | function npcHint(player: Player, npcKey: string | number): void {
  function spawnGoblinBoi (line 125) | async function spawnGoblinBoi(player: Player, spawnPoint: 'beginning' | ...
  function tutorialHandler (line 147) | async function tutorialHandler(player: Player): Promise<void> {
  function spawnQuestNpcs (line 163) | function spawnQuestNpcs(player: Player): void {
  constant QUEST_ID (line 205) | const QUEST_ID = 'tyn:goblin_diplomacy';
  constant QUEST (line 207) | const QUEST = new Quest({

FILE: src/plugins/quests/goblin-diplomacy-tutorial/stage-handler.ts
  function getAnim (line 205) | function getAnim() {

FILE: src/plugins/skills/construction/con-constants.ts
  constant MAP_SIZE (line 3) | const MAP_SIZE = 13;
  type RoomType (line 5) | type RoomType =

FILE: src/plugins/skills/construction/house.ts
  class House (line 71) | class House {
    method constructor (line 74) | public constructor() {
    method copyRooms (line 90) | public copyRooms(rooms: (Room | null)[][][]): void {
  class Room (line 103) | class Room extends ConstructedChunk {
    method constructor (line 106) | public constructor(type: RoomType, orientation: number = 0) {
    method getTemplatePosition (line 111) | public getTemplatePosition(): Position {

FILE: src/plugins/skills/crafting/spinning-wheel.plugin.ts
  type Spinnable (line 13) | interface Spinnable {
  type SpinnableButton (line 20) | interface SpinnableButton {
  class SpinProductTask (line 78) | class SpinProductTask extends ActorTask<Player> {
    method constructor (line 109) | constructor(player: Player, spinnable: Spinnable, count: number) {
    method execute (line 115) | public execute(): void {

FILE: src/plugins/skills/firemaking/data.ts
  constant FIREMAKING_LOGS (line 5) | const FIREMAKING_LOGS: Burnable[] = [

FILE: src/plugins/skills/firemaking/firemaking-task.ts
  class FiremakingTask (line 27) | class FiremakingTask extends ActorWorldItemInteractionTask<Player> {
    method constructor (line 45) | constructor(player: Player, logWorldItem: WorldItem) {
    method execute (line 65) | public execute() {
  function runFiremakingTask (line 125) | function runFiremakingTask(player: Player, worldItemLog: WorldItem) {

FILE: src/plugins/skills/firemaking/types.ts
  type Burnable (line 6) | type Burnable = {

FILE: src/plugins/skills/fletching/fletching-types.ts
  type Fletchable (line 2) | interface Fletchable {

FILE: src/plugins/skills/mining/mining-task.ts
  class MiningTask (line 27) | class MiningTask extends ActorLandscapeObjectInteractionTask<Player> {
    method constructor (line 40) | constructor(
    method isGemRock (line 58) | private isGemRock(): boolean {
    method hasChargedGlory (line 62) | private hasChargedGlory(): boolean {
    method execute (line 75) | public execute(): void {
    method hasMaterials (line 162) | private hasMaterials() {
    method getGemMiningChance (line 166) | private getGemMiningChance(): number {
    method hasLevel (line 187) | private hasLevel() {

FILE: src/plugins/skills/runecrafting/runecrafting-altar.plugin.ts
  function finishEnterAltar (line 53) | function finishEnterAltar(player: Player, item: Item, altar: Runecraftin...

FILE: src/plugins/skills/runecrafting/runecrafting-constants.ts
  function getEntityByAttr (line 480) | function getEntityByAttr<T>(entities: Map<any, T>, attr: string, value: ...
  function getEntityIds (line 505) | function getEntityIds<T>(entities: Map<any, T>, property: keyof T): numb...
  function runeMultiplier (line 516) | function runeMultiplier(runeId: number, level: number): number {

FILE: src/plugins/skills/runecrafting/runecrafting-crafting.plugin.ts
  function getCombinationRuneByAltar (line 66) | function getCombinationRuneByAltar(itemId: number, objectId: number): Ru...

FILE: src/plugins/skills/runecrafting/runecrafting-types.ts
  type RunecraftingRecipe (line 8) | interface RunecraftingRecipe {
  type RunecraftingTiara (line 12) | interface RunecraftingTiara {
  type RunecraftingTalisman (line 20) | interface RunecraftingTalisman {
  type RunecraftingAltar (line 24) | interface RunecraftingAltar {
  type RunecraftingRune (line 32) | interface RunecraftingRune {
  type RunecraftingCombinationRune (line 41) | interface RunecraftingCombinationRune {

FILE: src/plugins/skills/skill-guides/skill-guide-config.ts
  type SkillGuideConfiguration (line 5) | interface SkillGuideConfiguration {
  type SkillGuide (line 19) | interface SkillGuide {
  type SkillSubGuide (line 26) | interface SkillSubGuide {
  function loadSkillGuideConfigurations (line 40) | async function loadSkillGuideConfigurations(path: string): Promise<Skill...

FILE: src/plugins/skills/skill-guides/skill-guides.plugin.ts
  function loadGuide (line 14) | function loadGuide(player: Player, guideId: number, subGuideId: number =...

FILE: src/plugins/skills/smithing/forging-task.ts
  class ForgingTask (line 14) | class ForgingTask extends ActorTask<Player> {
    method constructor (line 18) | constructor(
    method execute (line 26) | public execute(): void {
    method hasMaterials (line 71) | private hasMaterials() {

FILE: src/plugins/skills/smithing/forging-types.ts
  type Smithable (line 2) | interface Smithable {

FILE: src/plugins/skills/smithing/smelting-constants.ts
  constant BRONZE (line 5) | const BRONZE: Bar = {
  constant BLURITE (line 15) | const BLURITE: Bar = {
  constant IRON (line 23) | const IRON: Bar = {
  constant SILVER (line 30) | const SILVER: Bar = {
  constant STEEL (line 37) | const STEEL: Bar = {
  constant GOLD (line 47) | const GOLD: Bar = {
  constant MITHRIL (line 54) | const MITHRIL: Bar = {
  constant ADAMANTITE (line 64) | const ADAMANTITE: Bar = {
  constant RUNEITE (line 74) | const RUNEITE: Bar = {

FILE: src/plugins/skills/smithing/smelting-task.ts
  class SmeltingTask (line 16) | class SmeltingTask extends ActorTask<Player> {
    method constructor (line 20) | constructor(
    method execute (line 28) | public execute(): void {
    method hasMaterials (line 80) | private hasMaterials() {
    method hasLevel (line 95) | private hasLevel() {

FILE: src/plugins/skills/smithing/smelting-types.ts
  type Bar (line 3) | interface Bar {
  type Smeltable (line 11) | interface Smeltable {

FILE: src/plugins/skills/woodcutting/woodcutting-task.ts
  class WoodcuttingTask (line 18) | class WoodcuttingTask extends ActorLandscapeObjectInteractionTask<Player> {
    method constructor (line 37) | constructor(player: Player, landscapeObject: LandscapeObject, sizeX: n...
    method getItemToAdd (line 52) | private getItemToAdd(): string | null {
    method execute (line 80) | public execute(): void {
    method onStop (line 187) | public onStop(): void {
  function runWoodcuttingTask (line 194) | function runWoodcuttingTask(player: Player, landscapeObject: LandscapeOb...

FILE: src/server/game/game-server-config.ts
  type GameServerConfig (line 1) | interface GameServerConfig {

FILE: src/server/game/game-server-connection.ts
  class GameServerConnection (line 8) | class GameServerConnection {
    method constructor (line 13) | public constructor(
    method decodeMessage (line 18) | public decodeMessage(buffer?: ByteBuffer): void | Promise<void> {
    method connectionDestroyed (line 111) | public connectionDestroyed(): void {
    method closeSocket (line 116) | public closeSocket(): void {

FILE: src/server/game/game-server.ts
  function setupConfig (line 26) | async function setupConfig(): Promise<boolean> {
  function launchGameServer (line 45) | async function launchGameServer(): Promise<void> {

FILE: src/server/gateway/gateway-server.ts
  type ServerType (line 17) | type ServerType = 'game_server' | 'login_server' | 'update_server';
  class GatewayServer (line 19) | class GatewayServer extends SocketServer {
    method constructor (line 26) | public constructor(private readonly clientSocket: Socket) {
    method initialHandshake (line 30) | public initialHandshake(buffer: ByteBuffer): boolean {
    method decodeMessage (line 85) | public decodeMessage(buffer: ByteBuffer): void | Promise<void> {
    method connectionDestroyed (line 95) | public connectionDestroyed(): void {
    method parseLoginServerResponse (line 101) | private async parseLoginServerResponse(buffer: ByteBuffer): Promise<vo...
    method createPlayer (line 143) | private async createPlayer(
Condensed preview — 488 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,502K chars).
[
  {
    "path": ".dockerignore",
    "chars": 38,
    "preview": "node_modules\nnpm-debug.log\n.gitignore\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug-report.md",
    "chars": 541,
    "preview": "---\nname: Bug Report\nabout: Create a report to help us improve\ntitle: \"[BUG]\"\nlabels: bug\nassignees: ''\n\n---\n\n**Describe"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/content-feature-plugin.md",
    "chars": 601,
    "preview": "---\nname: Content Feature/Plugin\nabout: New game content features or plugin requests\ntitle: \"[CONTENT]\"\nlabels: enhancem"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/game-engine-feature.md",
    "chars": 562,
    "preview": "---\nname: Game Engine Feature\nabout: New game engine or content API features\ntitle: \"[ENGINE] \"\nlabels: needs workshoppi"
  },
  {
    "path": ".github/workflows/build.yml",
    "chars": 878,
    "preview": "name: Check & Build Project\n\non:\n    pull_request:\n        branches: [ master, develop, feature/** ]\n    push:\n        b"
  },
  {
    "path": ".gitignore",
    "chars": 314,
    "preview": "node_modules\n.DS_Store\n/dist\n/data/dump\n/data/houses\n/data/saves/*.json\n/config/server-config.json\nserver-config.yaml\n\n#"
  },
  {
    "path": ".swcrc",
    "chars": 543,
    "preview": "{\n    \"$schema\": \"https://swc.rs/schema.json\",\n    \"exclude\": \"node_modules/\",\n    \"sourceMaps\": true,\n    \"module\": {\n "
  },
  {
    "path": ".vscode/settings.json",
    "chars": 145,
    "preview": "{\n    \"editor.tabSize\": 4,\n    \"files.trimTrailingWhitespace\": true,\n    \"files.trimFinalNewlines\": true,\n    \"files.ins"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 2794,
    "preview": "# Contributing to RuneJS\n\nRuneJS was created with the intention of utilizing JavaScript/TypeScript and Node's innovative"
  },
  {
    "path": "Dockerfile",
    "chars": 272,
    "preview": "FROM node:24\nWORKDIR /usr/src/app\nCOPY package.json ./\nCOPY package-lock.json ./\n\nRUN apt update\nRUN apt install -y libs"
  },
  {
    "path": "FEATURES.md",
    "chars": 3515,
    "preview": "[![RuneJS Discord Server](https://img.shields.io/discord/678751302297059336?label=RuneJS%20Discord&logo=discord)](https:"
  },
  {
    "path": "LICENSE",
    "chars": 35149,
    "preview": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
  },
  {
    "path": "README.md",
    "chars": 2846,
    "preview": "[![RuneJS Discord Server](https://img.shields.io/discord/678751302297059336?label=RuneJS%20Discord&logo=discord)](https:"
  },
  {
    "path": "biome.json",
    "chars": 2392,
    "preview": "{\n    \"$schema\": \"https://biomejs.dev/schemas/1.9.4/schema.json\",\n    \"vcs\": {\n        \"enabled\": true,\n        \"clientK"
  },
  {
    "path": "cache/file-names.properties",
    "chars": 33294,
    "preview": "-1863637185=miscgraphics,4\n-1863637184=miscgraphics,5\n-1863637187=miscgraphics,2\n-1863637186=miscgraphics,3\n-1863637181="
  },
  {
    "path": "config/file-names.properties",
    "chars": 33294,
    "preview": "-1863637185=miscgraphics,4\n-1863637184=miscgraphics,5\n-1863637187=miscgraphics,2\n-1863637186=miscgraphics,3\n-1863637181="
  },
  {
    "path": "config/server-config.example.json",
    "chars": 1162,
    "preview": "{\n    \"configDir\": \"./config\",\n    \"cacheDir\": \"./cache\",\n\n    \"host\": \"0.0.0.0\",\n    \"port\": 43594,\n\n    \"updateServerH"
  },
  {
    "path": "data/config/combat-styles.json",
    "chars": 1558,
    "preview": "{\n    \"unarmed\": [\n        {\n            \"type\": \"crush\",\n            \"exp\": \"attack\",\n            \"anim\": \"punch\",\n    "
  },
  {
    "path": "data/config/examine-item-data.yaml",
    "chars": 332952,
    "preview": "- id: 0 # Dwarf remains\n  examine: \"The body of a Dwarf savaged by Goblins.\"\n- id: 1 # Toolkit\n  examine: \"Good for repa"
  },
  {
    "path": "data/config/item-spawns/lumbridge/lumbridge.json",
    "chars": 612,
    "preview": "[\n    {\n        \"item\": \"rs:coins\",\n        \"amount\": 25,\n        \"spawn_x\": 3211,\n        \"spawn_y\": 3240,\n        \"ins"
  },
  {
    "path": "data/config/items/barrows/dharoks.json",
    "chars": 1448,
    "preview": "{\n    \"rs:dharoks_axe\": {\n        \"tradable\": true,\n        \"equippable\": true,\n        \"equipment_data\": {\n            "
  },
  {
    "path": "data/config/items/bolts.json",
    "chars": 713,
    "preview": "{\n    \"rs:bronze_bolt\": {\n        \"game_id\": 877\n    },\n    \"rs:opal_bolt\": {\n        \"game_id\": 879\n    },\n    \"rs:blur"
  },
  {
    "path": "data/config/items/bones.json",
    "chars": 4697,
    "preview": "{\n    \"rs:bones\": {\n        \"game_id\": 526,\n        \"tradable\": true,\n        \"weight\": 0.5,\n        \"metadata\": {\n     "
  },
  {
    "path": "data/config/items/containers.json",
    "chars": 999,
    "preview": "{\n    \"rs:pot\": {\n        \"game_id\": 1931,\n        \"examine\": \"This pot is empty.\",\n        \"tradable\": true,\n        \"w"
  },
  {
    "path": "data/config/items/currency.json",
    "chars": 77,
    "preview": "{\n    \"rs:coins\": {\n        \"game_id\": 995,\n        \"tradable\": true\n    }\n}\n"
  },
  {
    "path": "data/config/items/equipment/amulets.json",
    "chars": 1544,
    "preview": "{\n    \"rs:amulet_of_glory\": {\n        \"game_id\": 1704,\n        \"examine\": \"A very powerful dragonstone amulet.\",\n       "
  },
  {
    "path": "data/config/items/equipment/axes.json",
    "chars": 746,
    "preview": "{\n    \"rs:dharoks_greataxe\": {\n        \"game_id\": 4718,\n        \"examine\": \"Dharok the Wretched's greataxe.\",\n        \"t"
  },
  {
    "path": "data/config/items/equipment/bows.json",
    "chars": 651,
    "preview": "{\n    \"rs:shortbow\": {\n        \"game_id\": 50\n    },\n    \"rs:longbow\": {\n        \"game_id\": 48\n    },\n    \"rs:oak_shortbo"
  },
  {
    "path": "data/config/items/equipment/capes.json",
    "chars": 476,
    "preview": "{\n    \"rs:cape_of_legends\": {\n        \"game_id\": 1052,\n        \"examine\": \"The cape worn by members of the Legends Guild"
  },
  {
    "path": "data/config/items/equipment/daggers.json",
    "chars": 3601,
    "preview": "{\n    \"rs:iron_dagger\": {\n        \"game_id\": 1203,\n        \"examine\": \"Short but pointy.\",\n        \"tradable\": true,\n   "
  },
  {
    "path": "data/config/items/equipment/darts.json",
    "chars": 324,
    "preview": "{\n    \"rs:bronze_dart\": {\n        \"game_id\": 806\n    },\n    \"rs:iron_dart\": {\n        \"game_id\": 807\n    },\n    \"rs:stee"
  },
  {
    "path": "data/config/items/equipment/halberd.json",
    "chars": 7173,
    "preview": "{\n    \"rs:iron_halberd\": {\n        \"game_id\": 3192,\n        \"examine\": \"Short but pointy.\",\n        \"tradable\": true,\n  "
  },
  {
    "path": "data/config/items/equipment/hammers.json",
    "chars": 226,
    "preview": "{\n    \"rs:torags_hammers\": {\n        \"game_id\": 4747,\n        \"examine\": \"Torag the Corrupted's twin hammers.\",\n        "
  },
  {
    "path": "data/config/items/equipment/hatchets.json",
    "chars": 3772,
    "preview": "{\n    \"presets\": {\n        \"rs:woodcutting_axe\": {\n            \"tradable\": true,\n            \"equippable\": true,\n       "
  },
  {
    "path": "data/config/items/equipment/hats.json",
    "chars": 551,
    "preview": "{\n    \"rs:wizard_hat_(blue)\": {\n        \"game_id\": 579,\n        \"weight\": 0.453,\n        \"equipment_data\": {\n           "
  },
  {
    "path": "data/config/items/equipment/javelins.json",
    "chars": 336,
    "preview": "{\n    \"rs:bronze_javelin\": {\n        \"game_id\": 52\n    },\n    \"rs:iron_javelin\": {\n        \"game_id\": 52\n    },\n    \"rs:"
  },
  {
    "path": "data/config/items/equipment/leather-armour.json",
    "chars": 4716,
    "preview": "{\n    \"rs:leather_cowl\": {\n        \"game_id\": 1167,\n        \"examine\": \"Better than no armour!\",\n        \"tradable\": tru"
  },
  {
    "path": "data/config/items/equipment/longswords.json",
    "chars": 964,
    "preview": "{\n    \"rs:dragon_longsword\": {\n        \"game_id\": 1305,\n        \"examine\": \"A very powerful sword.\",\n        \"tradable\":"
  },
  {
    "path": "data/config/items/equipment/mauls.json",
    "chars": 735,
    "preview": "{\n    \"rs:granite_maul\": {\n        \"game_id\": 4153,\n        \"examine\": \"Simplicity is the best weapon.\",\n        \"tradab"
  },
  {
    "path": "data/config/items/equipment/pickaxes.json",
    "chars": 3149,
    "preview": "{\n    \"presets\": {\n        \"rs:pickaxe_base\": {\n            \"examine\": \"Used for mining.\",\n            \"tradable\": true,"
  },
  {
    "path": "data/config/items/equipment/shortswords.json",
    "chars": 742,
    "preview": "{\n    \"rs:toktz_xil_ak\": {\n        \"game_id\": 6523,\n        \"examine\": \"A razor sharp sword of obsidian.\",\n        \"trad"
  },
  {
    "path": "data/config/items/equipment/skillscapes.json",
    "chars": 17896,
    "preview": "{\n    \"presets\": {\n        \"rs:skillcape\": {\n            \"tradable\": false,\n            \"weight\": 0.453,\n            \"eq"
  },
  {
    "path": "data/config/items/equipment/slayer.json",
    "chars": 11409,
    "preview": "{\n    \"rs:black_mask\": {\n        \"game_id\": 8921,\n        \"examine\": \"An inert-seeming cave horror mask.\",\n        \"trad"
  },
  {
    "path": "data/config/items/equipment/spears.json",
    "chars": 170,
    "preview": "{\n    \"rs:guthans_warspear\": {\n        \"game_id\": 4726,\n        \"tradable\": true,\n        \"notable\": true,\n        \"stac"
  },
  {
    "path": "data/config/items/equipment/staffs.json",
    "chars": 4899,
    "preview": "{\n    \"presets\": {\n        \"rs:staff_base\": {\n            \"tradable\": true,\n            \"equippable\": true,\n            "
  },
  {
    "path": "data/config/items/equipment/standard-metals/adamant-armour.json",
    "chars": 1553,
    "preview": "{\n    \"presets\": {\n        \"rs:adamant_armour_base\": {\n            \"tradable\": true,\n            \"equippable\": true,\n   "
  },
  {
    "path": "data/config/items/equipment/standard-metals/black-armour.json",
    "chars": 1550,
    "preview": "{\n    \"presets\": {\n        \"rs:black_armour_base\": {\n            \"tradable\": true,\n            \"equippable\": true,\n     "
  },
  {
    "path": "data/config/items/equipment/standard-metals/bronze-armour.json",
    "chars": 1644,
    "preview": "{\n    \"presets\": {\n        \"rs:bronze_armour_base\": {\n            \"tradable\": true,\n            \"equippable\": true,\n    "
  },
  {
    "path": "data/config/items/equipment/standard-metals/bronze-weapons.json",
    "chars": 1292,
    "preview": "{\n    \"presets\": {\n        \"rs:bronze_weapon_base\": {\n            \"tradable\": true,\n            \"equippable\": true,\n    "
  },
  {
    "path": "data/config/items/equipment/standard-metals/iron-armour.json",
    "chars": 1131,
    "preview": "{\n    \"rs:iron_platelegs\": {\n        \"game_id\": 1067,\n        \"examine\": \"These look pretty heavy.\",\n        \"weight\": 9"
  },
  {
    "path": "data/config/items/equipment/standard-metals/iron-weapons.json",
    "chars": 702,
    "preview": "{\n    \"rs:iron_battleaxe\": {\n        \"game_id\": 1363,\n        \"examine\": \"A vicious looking axe.\",\n        \"tradable\": t"
  },
  {
    "path": "data/config/items/equipment/standard-metals/mithril-armour.json",
    "chars": 1442,
    "preview": "{\n    \"presets\": {\n        \"rs:mithril_armour_base\": {\n            \"tradable\": true,\n            \"equippable\": true,\n   "
  },
  {
    "path": "data/config/items/equipment/standard-metals/mithril-weapons.json",
    "chars": 831,
    "preview": "{\n    \"rs:mithril_battleaxe\": {\n        \"game_id\": 1369,\n        \"examine\": \"A vicious looking axe.\",\n        \"tradable\""
  },
  {
    "path": "data/config/items/equipment/standard-metals/rune-armour.json",
    "chars": 6866,
    "preview": "{\n    \"presets\": {\n        \"rs:rune_armour_base\": {\n            \"tradable\": true,\n            \"equippable\": true,\n      "
  },
  {
    "path": "data/config/items/equipment/standard-metals/rune-god-armour.json",
    "chars": 9545,
    "preview": "{\n    \"presets\": {\n        \"rs:rune_god_armour_base\": {\n            \"tradable\": true,\n            \"equippable\": true,\n  "
  },
  {
    "path": "data/config/items/equipment/standard-metals/steel-armour.json",
    "chars": 1431,
    "preview": "{\n    \"presets\": {\n        \"rs:steel_armour_base\": {\n            \"tradable\": true,\n            \"equippable\": true,\n     "
  },
  {
    "path": "data/config/items/equipment/standard-metals/steel-weapons.json",
    "chars": 828,
    "preview": "{\n    \"rs:steel_battleaxe\": {\n        \"game_id\": 1365,\n        \"examine\": \"A vicious looking axe.\",\n        \"tradable\": "
  },
  {
    "path": "data/config/items/equipment/standard-metals/white-armour.json",
    "chars": 758,
    "preview": "{\n    \"rs:white_full_helm\": {\n        \"game_id\": 6623,\n        \"tradable\": true,\n        \"weight\": 2.721,\n        \"equip"
  },
  {
    "path": "data/config/items/equipment/tiaras.json",
    "chars": 3156,
    "preview": "{\n    \"rs:air_tiara\": {\n        \"game_id\": 5527,\n        \"tradable\": true,\n        \"weight\": 1,\n        \"equippable\": tr"
  },
  {
    "path": "data/config/items/equipment/training.json",
    "chars": 1444,
    "preview": "{\n    \"rs:training_sword\": {\n        \"game_id\": 9703,\n        \"examine\": \"Basic training sword.\",\n        \"tradable\": fa"
  },
  {
    "path": "data/config/items/equipment/whips.json",
    "chars": 2066,
    "preview": "{\n    \"rs:abyssal_whip\": {\n        \"game_id\": 4151,\n        \"examine\": \"A weapon from the Abyss.\",\n        \"tradable\": t"
  },
  {
    "path": "data/config/items/food.json",
    "chars": 29756,
    "preview": "{\n    \"presets\": {\n        \"rs:food\": {\n            \"tradable\": true,\n            \"consumable\": true,\n            \"metad"
  },
  {
    "path": "data/config/items/holiday/partyhats.json",
    "chars": 833,
    "preview": "{\n    \"presets\": {\n        \"rs:partyhat\": {\n            \"tradable\": true,\n            \"weight\": 0.056,\n            \"equi"
  },
  {
    "path": "data/config/items/icons.json",
    "chars": 915,
    "preview": "{\n    \"rs:gnome_stronghold_agility_course\": {\n        \"game_id\": 2150\n    },\n    \"rs:gnomeball_game\": {\n        \"game_id"
  },
  {
    "path": "data/config/items/logs.json",
    "chars": 1720,
    "preview": "{\n    \"presets\": {\n        \"rs:log\": {\n            \"tradable\": true,\n            \"weight\": 2\n        }\n    },\n\n    \"rs:l"
  },
  {
    "path": "data/config/items/other.json",
    "chars": 195,
    "preview": "{\n    \"rs:dwarf_remains\": {\n        \"game_id\": 0,\n        \"tradable\": false\n    },\n    \"rs:rotten_potato\": {\n        \"ga"
  },
  {
    "path": "data/config/items/quests/lost-city.json",
    "chars": 196,
    "preview": "{\n    \"rs:dramen_branch\": {\n        \"game_id\": 771,\n        \"examine\": \"A limb of the fabled Dramen tree.\",\n        \"tra"
  },
  {
    "path": "data/config/items/quests/witchs-potion.json",
    "chars": 107,
    "preview": "{\n    \"rs:rats_tail\": {\n        \"game_id\": 300,\n        \"tradable\": false,\n        \"weight\": 0.003\n    }\n}\n"
  },
  {
    "path": "data/config/items/skills/artisan-tools.json",
    "chars": 900,
    "preview": "{\n    \"rs:shears\": {\n        \"game_id\": 5603,\n        \"examine\": \"For shearing sheep.\",\n        \"tradable\": true,\n      "
  },
  {
    "path": "data/config/items/skills/baking.json",
    "chars": 288,
    "preview": "{\n    \"rs:cake_tin\": {\n        \"game_id\": 1887,\n        \"examine\": \"Useful for baking cakes.\",\n        \"tradable\": true,"
  },
  {
    "path": "data/config/items/skills/cooking.json",
    "chars": 168,
    "preview": "{\n    \"rs:raw_rat_meat\": {\n        \"game_id\": 2134\n    },\n    \"rs:cooked_meat\": {\n        \"game_id\": 2142\n    },\n    \"rs"
  },
  {
    "path": "data/config/items/skills/crafting/gems.json",
    "chars": 1678,
    "preview": "{\n    \"presets\": {\n        \"rs:uncut_gem_base\": {\n            \"examine\": \"This would be worth more cut.\",\n            \"w"
  },
  {
    "path": "data/config/items/skills/crafting/jewelery-moulds.json",
    "chars": 978,
    "preview": "{\n    \"presets\": {\n        \"rs:mould_base\": {\n            \"weight\": 0.453,\n            \"tradable\": true\n        }\n    },"
  },
  {
    "path": "data/config/items/skills/firemaking.json",
    "chars": 1046,
    "preview": "{\n    \"rs:tinderbox\": {\n        \"game_id\": 590,\n        \"tradable\": true,\n        \"weight\": 0.035\n    },\n    \"rs:normal_"
  },
  {
    "path": "data/config/items/skills/fishing.json",
    "chars": 457,
    "preview": "{\n    \"rs:small_fishing_net\": {\n        \"game_id\": 303\n    },\n    \"rs:big_fishing_net\": {\n        \"game_id\": 305\n    },\n"
  },
  {
    "path": "data/config/items/skills/fletching/arrows.json",
    "chars": 438,
    "preview": "{\n    \"rs:arrow_shaft\": {\n        \"game_id\": 52\n    },\n    \"rs:bronze_arrow\": {\n        \"game_id\": 882\n    },\n    \"rs:ir"
  },
  {
    "path": "data/config/items/skills/fletching/bolts.json",
    "chars": 713,
    "preview": "{\n    \"rs:bronze_bolt\": {\n        \"game_id\": 877\n    },\n    \"rs:opal_bolt\": {\n        \"game_id\": 879\n    },\n    \"rs:blur"
  },
  {
    "path": "data/config/items/skills/herblore/herbs.json",
    "chars": 3003,
    "preview": "{\n    \"presets\": {\n        \"rs:grimy_herb_base\": {\n            \"examine\": \"It needs cleaning.\",\n            \"weight\": 0."
  },
  {
    "path": "data/config/items/skills/herblore/ingredients.json",
    "chars": 57,
    "preview": "{\n    \"rs:eye_of_newt\": {\n        \"game_id\": 221\n    }\n}\n"
  },
  {
    "path": "data/config/items/skills/herblore/tools.json",
    "chars": 176,
    "preview": "{\n    \"rs:pestle_and_mortar\": {\n        \"game_id\": 233,\n        \"examine\": \"I can grind things for potions in this.\",\n  "
  },
  {
    "path": "data/config/items/skills/herblore.json",
    "chars": 2972,
    "preview": "{\n    \"rs:herblore_attack_potion\": {\n        \"game_id\": 221\n    },\n    \"rs:herblore_anti_poison_potion\": {\n        \"game"
  },
  {
    "path": "data/config/items/skills/mining.json",
    "chars": 3232,
    "preview": "{\n    \"rs:rune_essence\": {\n        \"game_id\": 1436,\n        \"examine\": \"An unimbued rune.\",\n        \"tradable\": true,\n  "
  },
  {
    "path": "data/config/items/skills/prayer.json",
    "chars": 129,
    "preview": "{\n    \"rs:prayer_guide\": {\n        \"game_id\": 1714\n    },\n    \"rs:herblore_anti_poison_potion\": {\n        \"game_id\": 235"
  },
  {
    "path": "data/config/items/skills/runecrafting.json",
    "chars": 11174,
    "preview": "{\n    \"rs:binding_necklace\": {\n        \"game_id\": 5521,\n        \"tradable\": true,\n        \"weight\": 0.01,\n        \"equip"
  },
  {
    "path": "data/config/music/musicRegions.json",
    "chars": 67212,
    "preview": "{\n    \"musicRegions\": [\n        {\n            \"songId\": 363,\n            \"songName\": \"7th Realm\",\n            \"musicTabB"
  },
  {
    "path": "data/config/npc-spawns/alkharid/alkharid-general.json",
    "chars": 650,
    "preview": "[\n    {\n        \"npc\": \"rs:alkharid_gem_trader\",\n        \"spawn_x\": 3288,\n        \"spawn_y\": 3212,\n        \"movement_rad"
  },
  {
    "path": "data/config/npc-spawns/ardougne/bankers.json",
    "chars": 798,
    "preview": "[\n    {\n        \"npc\": \"rs:banker\",\n        \"spawn_x\": 2657,\n        \"spawn_y\": 3286,\n        \"movement_radius\": 0\n    }"
  },
  {
    "path": "data/config/npc-spawns/ardougne/guards.json",
    "chars": 1322,
    "preview": "[\n    {\n        \"npc\": \"rs:guard:2\",\n        \"spawn_x\": 2635,\n        \"spawn_y\": 3339,\n        \"movement_radius\": 5,\n   "
  },
  {
    "path": "data/config/npc-spawns/ardougne/market.json",
    "chars": 2086,
    "preview": "[\n    {\n        \"npc\": \"rs:ardougne_baker:0\",\n        \"spawn_x\": 2654,\n        \"spawn_y\": 3311,\n        \"movement_radius"
  },
  {
    "path": "data/config/npc-spawns/camelot/bankers.json",
    "chars": 583,
    "preview": "[\n    {\n        \"npc\": \"rs:banker\",\n        \"spawn_x\": 2807,\n        \"spawn_y\": 3443,\n        \"movement_radius\": 0,\n    "
  },
  {
    "path": "data/config/npc-spawns/canifis/bankers.json",
    "chars": 579,
    "preview": "[\n    {\n        \"npc\": \"rs:banker\",\n        \"spawn_x\": 3514,\n        \"spawn_y\": 3482,\n        \"movement_radius\": 0,\n    "
  },
  {
    "path": "data/config/npc-spawns/catherby/bankers.json",
    "chars": 873,
    "preview": "[\n    {\n        \"npc\": \"rs:banker\",\n        \"spawn_x\": 2729,\n        \"spawn_y\": 3495,\n        \"movement_radius\": 0,\n    "
  },
  {
    "path": "data/config/npc-spawns/draynor/bankers.json",
    "chars": 435,
    "preview": "[\n    {\n        \"npc\": \"rs:banker\",\n        \"spawn_x\": 3090,\n        \"spawn_y\": 3242,\n        \"movement_radius\": 0,\n    "
  },
  {
    "path": "data/config/npc-spawns/edgeville/bankers.json",
    "chars": 581,
    "preview": "[\n    {\n        \"npc\": \"rs:banker\",\n        \"spawn_x\": 3096,\n        \"spawn_y\": 3491,\n        \"movement_radius\": 0,\n    "
  },
  {
    "path": "data/config/npc-spawns/falador/bankers.json",
    "chars": 1598,
    "preview": "[\n    {\n        \"npc\": \"rs:banker\",\n        \"spawn_x\": 2947,\n        \"spawn_y\": 3366,\n        \"movement_radius\": 0,\n    "
  },
  {
    "path": "data/config/npc-spawns/falador/guards.json",
    "chars": 441,
    "preview": "[\n    {\n        \"npc\": \"rs:guard:0\",\n        \"spawn_x\": 2967,\n        \"spawn_y\": 3388,\n        \"movement_radius\": 5,\n   "
  },
  {
    "path": "data/config/npc-spawns/keldagrim/bankers.json",
    "chars": 295,
    "preview": "[\n    {\n        \"npc\": \"rs:banker\",\n        \"spawn_x\": 2836,\n        \"spawn_y\": 10205,\n        \"movement_radius\": 0,\n   "
  },
  {
    "path": "data/config/npc-spawns/lumbridge/bankers.json",
    "chars": 345,
    "preview": "[\n    {\n        \"npc\": \"rs:banker\",\n        \"spawn_x\": 3209,\n        \"spawn_y\": 3222,\n        \"spawn_level\": 2,\n        "
  },
  {
    "path": "data/config/npc-spawns/lumbridge/lumbridge-general.json",
    "chars": 1019,
    "preview": "[\n    {\n        \"npc\": \"rs:hans\",\n        \"spawn_x\": 3222,\n        \"spawn_y\": 3222,\n        \"movement_radius\": 8\n    },\n"
  },
  {
    "path": "data/config/npc-spawns/lumbridge/lumbridge-goblins.json",
    "chars": 1443,
    "preview": "[\n    {\n        \"npc\": \"rs:goblin\",\n        \"spawn_x\": 3263,\n        \"spawn_y\": 3232,\n        \"movement_radius\": 8\n    }"
  },
  {
    "path": "data/config/npc-spawns/lumbridge/lumbridge-sheep.json",
    "chars": 735,
    "preview": "[\n    {\n        \"npc\": \"rs:spy_penguin_sheep\",\n        \"spawn_x\": 3197,\n        \"spawn_y\": 3262,\n        \"movement_radiu"
  },
  {
    "path": "data/config/npc-spawns/magebank/bankers.json",
    "chars": 147,
    "preview": "[\n    {\n        \"npc\": \"rs:banker\",\n        \"spawn_x\": 2534,\n        \"spawn_y\": 4713,\n        \"movement_radius\": 0,\n    "
  },
  {
    "path": "data/config/npc-spawns/nardah/bankers.json",
    "chars": 579,
    "preview": "[\n    {\n        \"npc\": \"rs:banker\",\n        \"spawn_x\": 3425,\n        \"spawn_y\": 2889,\n        \"movement_radius\": 0,\n    "
  },
  {
    "path": "data/config/npc-spawns/pestcontrol/bankers.json",
    "chars": 583,
    "preview": "[\n    {\n        \"npc\": \"rs:banker\",\n        \"spawn_x\": 2665,\n        \"spawn_y\": 2651,\n        \"movement_radius\": 0,\n    "
  },
  {
    "path": "data/config/npc-spawns/portsarim/port-sarim-general.json",
    "chars": 470,
    "preview": "[\n    {\n        \"npc\": \"rs:betty\",\n        \"spawn_x\": 3012,\n        \"spawn_y\": 3259,\n        \"movement_radius\": 5\n    },"
  },
  {
    "path": "data/config/npc-spawns/rimmington/rimmington.json",
    "chars": 843,
    "preview": "[\n    {\n        \"npc\": \"rs:hetty\",\n        \"spawn_x\": 2968,\n        \"spawn_y\": 3205,\n        \"spawn_level\": 0,\n        \""
  },
  {
    "path": "data/config/npc-spawns/shilovillage/bankers.json",
    "chars": 147,
    "preview": "[\n    {\n        \"npc\": \"rs:banker\",\n        \"spawn_x\": 2852,\n        \"spawn_y\": 2955,\n        \"movement_radius\": 0,\n    "
  },
  {
    "path": "data/config/npc-spawns/varrock/bankers.json",
    "chars": 1447,
    "preview": "[\n    {\n        \"npc\": \"rs:banker\",\n        \"spawn_x\": 3252,\n        \"spawn_y\": 3418,\n        \"movement_radius\": 0,\n    "
  },
  {
    "path": "data/config/npc-spawns/varrock/blue-moon-inn.json",
    "chars": 656,
    "preview": "[\n    {\n        \"npc\": \"rs:barbarian_woman\",\n        \"spawn_x\": 3224,\n        \"spawn_y\": 3402,\n        \"movement_radius\""
  },
  {
    "path": "data/config/npc-spawns/varrock/varrock-general.json",
    "chars": 1165,
    "preview": "[\n    {\n        \"npc\": \"rs:varrock_zaff\",\n        \"spawn_x\": 3203,\n        \"spawn_y\": 3432,\n        \"movement_radius\": 2"
  },
  {
    "path": "data/config/npc-spawns/yanille/bankers.json",
    "chars": 435,
    "preview": "[\n    {\n        \"npc\": \"rs:banker\",\n        \"spawn_x\": 2615,\n        \"spawn_y\": 3091,\n        \"movement_radius\": 0,\n    "
  },
  {
    "path": "data/config/npcs/alkharid.json",
    "chars": 295,
    "preview": "{\n    \"rs:alkharid_gem_trader\": {\n        \"game_id\": 540\n    },\n    \"rs:alkharid_dommik\": {\n        \"game_id\": 545\n    }"
  },
  {
    "path": "data/config/npcs/ardougne.json",
    "chars": 806,
    "preview": "{\n    \"rs:ardougne_baker\": {\n        \"variations\": [\n            {\n                \"suffix\": 0,\n                \"game_id"
  },
  {
    "path": "data/config/npcs/bankers.json",
    "chars": 52,
    "preview": "{\n    \"rs:banker\": {\n        \"game_id\": 494\n    }\n}\n"
  },
  {
    "path": "data/config/npcs/barbarians.json",
    "chars": 60,
    "preview": "{\n    \"rs:barbarian_woman\": {\n        \"game_id\": 17\n    }\n}\n"
  },
  {
    "path": "data/config/npcs/general.json",
    "chars": 526,
    "preview": "{\n    \"rs:rat\": {\n        \"game_id\": 47,\n        \"drop_table\": [\n            {\n                \"itemKey\": \"rs:rats_tail\""
  },
  {
    "path": "data/config/npcs/generic-humans.json",
    "chars": 1100,
    "preview": "{\n    \"presets\": {\n        \"rs:human_male\": {\n            \"killable\": true,\n            \"respawn_time\": 3,\n            \""
  },
  {
    "path": "data/config/npcs/goblins.json",
    "chars": 2158,
    "preview": "{\n    \"presets\": {\n        \"rs:goblin_base_l2\": {\n            \"killable\": true,\n            \"respawn_time\": 3,\n         "
  },
  {
    "path": "data/config/npcs/guards.json",
    "chars": 769,
    "preview": "{\n    \"rs:guard\": {\n        \"variations\": [\n            {\n                \"suffix\": 0,\n                \"game_id\": 9\n    "
  },
  {
    "path": "data/config/npcs/lumbridge.json",
    "chars": 552,
    "preview": "{\n    \"rs:hans\": {\n        \"game_id\": 0,\n        \"skills\": {\n            \"hitpoints\": 10,\n            \"herblore\": 99\n   "
  },
  {
    "path": "data/config/npcs/port-sarim.json",
    "chars": 539,
    "preview": "{\n    \"rs:betty\": {\n        \"game_id\": 583\n    },\n    \"rs:Giant_rat\": {\n        \"game_id\": 86,\n        \"drop_table\": [\n "
  },
  {
    "path": "data/config/npcs/rimmington.json",
    "chars": 51,
    "preview": "{\n    \"rs:hetty\": {\n        \"game_id\": 307\n    }\n}\n"
  },
  {
    "path": "data/config/npcs/sheep.json",
    "chars": 164,
    "preview": "{\n    \"rs:spy_penguin_sheep\": {\n        \"game_id\": 3579\n    },\n    \"rs:sheep\": {\n        \"game_id\": 43\n    },\n    \"rs:na"
  },
  {
    "path": "data/config/npcs/varrock.json",
    "chars": 767,
    "preview": "{\n    \"rs:varrock_zaff\": {\n        \"game_id\": 546\n    },\n    \"rs:blue_moon_inn_bartender\": {\n        \"game_id\": 734\n    "
  },
  {
    "path": "data/config/scenery-spawns.yaml",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "data/config/shops/alkharid/alkharid-gem-trader.json",
    "chars": 1264,
    "preview": "{\n    \"rs:alkharid_gem_trader\": {\n        \"name\": \"Gem Trader\",\n        \"shop_sell_rate\": 1.0,\n        \"shop_buy_rate\": "
  },
  {
    "path": "data/config/shops/alkharid/dommiks-crafting-store.json",
    "chars": 1402,
    "preview": "{\n    \"rs:dommiks_crafting_store\": {\n        \"name\": \"Dommik's Crafting Store\",\n        \"shop_sell_rate\": 1.0,\n        \""
  },
  {
    "path": "data/config/shops/alkharid/louies-armored-legs.json",
    "chars": 1047,
    "preview": "{\n    \"rs:louies_armored_legs\": {\n        \"name\": \"Louie's Armoured Legs Bazaar\",\n        \"shop_sell_rate\": 1.0,\n       "
  },
  {
    "path": "data/config/shops/alkharid/ranaels-skirt-store.json",
    "chars": 1051,
    "preview": "{\n    \"rs:ranaels_skirt_store\": {\n        \"name\": \"Ranael's Super Skirt Store\",\n        \"shop_sell_rate\": 1.0,\n        \""
  },
  {
    "path": "data/config/shops/lumbridge/bobs-axes.json",
    "chars": 1153,
    "preview": "{\n    \"rs:lumbridge_bobs_axes\": {\n        \"name\": \"Bob's Brilliant Axes.\",\n        \"shop_sell_rate\": 1.0,\n        \"shop_"
  },
  {
    "path": "data/config/shops/lumbridge/lumbridge-general-store.json",
    "chars": 1650,
    "preview": "{\n    \"rs:lumbridge_general_store\": {\n        \"name\": \"Lumbridge General Store\",\n        \"general_store\": true,\n        "
  },
  {
    "path": "data/config/shops/portsarim/bettys-magic-emporium.json",
    "chars": 1696,
    "preview": "{\n    \"rs:bettys_magic_emporium\": {\n        \"name\": \"Betty's Magic Emporium\",\n        \"shop_sell_rate\": 1.0,\n        \"sh"
  },
  {
    "path": "data/config/shops/shilo-village/oblis-general-store.json",
    "chars": 3278,
    "preview": "{\n    \"rs:oblis-general-store\": {\n        \"name\": \"Obli's General Store\",\n        \"general_store\": true,\n        \"shop_s"
  },
  {
    "path": "data/config/shops/varrock/zaffs-staffs.json",
    "chars": 1152,
    "preview": "{\n    \"rs:zaffs_superior_staffs\": {\n        \"name\": \"Zaff's Superior Staffs\",\n        \"shop_sell_rate\": 1.0,\n        \"sh"
  },
  {
    "path": "data/config/travel-locations-data.yaml",
    "chars": 13153,
    "preview": "- name: Abandoned Mine\n  x: 3441\n  y: 3236\n  z: 0\n- name: Agility Arena\n  x: 2809\n  y: 3191\n  z: 0\n- name: Agility Pyram"
  },
  {
    "path": "data/config/widgets.json",
    "chars": 2632,
    "preview": "{\n    \"characterDesign\": 269,\n    \"furnace\": {\n        \"widgetId\": 311,\n        \"slots\": {\n            \"slot0\": {\n      "
  },
  {
    "path": "data/config/xteas/435.json",
    "chars": 101852,
    "preview": "[\n  {\n    \"archive\": 5,\n    \"group\": 1,\n    \"name_hash\": -1153472937,\n    \"name\": \"l40_55\",\n    \"mapsquare\": 10295,\n    "
  },
  {
    "path": "data/saves/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "docker-compose.yml",
    "chars": 287,
    "preview": "services:\n  runejs_game_server:\n    build:\n      context: .\n      dockerfile: Dockerfile\n    volumes:\n      - ./data:/us"
  },
  {
    "path": "jest.config.ts",
    "chars": 6906,
    "preview": "/*\n * For a detailed explanation regarding each configuration property and type check, visit:\n * https://jestjs.io/docs/"
  },
  {
    "path": "nodemon.json",
    "chars": 100,
    "preview": "{\n    \"verbose\": true,\n    \"ignore\": [\"src/plugins/\"],\n    \"watch\": [\"src/\"],\n    \"ext\": \"ts, js\"\n}\n"
  },
  {
    "path": "package.json",
    "chars": 3258,
    "preview": "{\n    \"name\": \"@runejs/server\",\n    \"version\": \"1.0.0-alpha.3\",\n    \"description\": \"A RuneScape game server emulator wri"
  },
  {
    "path": "src/engine/action/action-pipeline.ts",
    "chars": 5847,
    "preview": "import type { ActionHook } from '@engine/action/hook/action-hook';\nimport { TaskExecutor } from '@engine/action/hook/tas"
  },
  {
    "path": "src/engine/action/hook/action-hook.ts",
    "chars": 2034,
    "preview": "import type { ActionStrength, ActionType } from '@engine/action/action-pipeline';\nimport type { HookTask } from '@engine"
  },
  {
    "path": "src/engine/action/hook/hook-filters.test.ts",
    "chars": 906,
    "preview": "import { advancedNumberHookFilter } from './hook-filters';\n\ndescribe('action/hook hook filters', () => {\n    describe('a"
  },
  {
    "path": "src/engine/action/hook/hook-filters.ts",
    "chars": 2789,
    "preview": "import type { ActionHook } from '@engine/action/hook/action-hook';\nimport type { Player } from '@engine/world/actor/play"
  },
  {
    "path": "src/engine/action/hook/task.ts",
    "chars": 5330,
    "preview": "import type { Subscription } from 'rxjs';\nimport { lastValueFrom, timer } from 'rxjs';\nimport { v4 } from 'uuid';\n\nimpor"
  },
  {
    "path": "src/engine/action/loader.ts",
    "chars": 1504,
    "preview": "import { join } from 'path';\nimport type { ActionPipe } from '@engine/action/action-pipeline';\nimport { ActionPipeline }"
  },
  {
    "path": "src/engine/action/pipe/button.action.ts",
    "chars": 2598,
    "preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport { type ActionHook, getActionHook"
  },
  {
    "path": "src/engine/action/pipe/equipment-change.action.ts",
    "chars": 3396,
    "preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
  },
  {
    "path": "src/engine/action/pipe/item-interaction.action.ts",
    "chars": 4957,
    "preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
  },
  {
    "path": "src/engine/action/pipe/item-on-item.action.ts",
    "chars": 3461,
    "preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
  },
  {
    "path": "src/engine/action/pipe/item-on-npc.action.ts",
    "chars": 4050,
    "preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
  },
  {
    "path": "src/engine/action/pipe/item-on-object.action.ts",
    "chars": 4602,
    "preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
  },
  {
    "path": "src/engine/action/pipe/item-on-player.action.ts",
    "chars": 3781,
    "preview": "import type { ActionPipe } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engine/action/hook/a"
  },
  {
    "path": "src/engine/action/pipe/item-on-world-item.action.ts",
    "chars": 3799,
    "preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
  },
  {
    "path": "src/engine/action/pipe/item-swap.action.ts",
    "chars": 2315,
    "preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
  },
  {
    "path": "src/engine/action/pipe/magic-on-npc.action.ts",
    "chars": 2239,
    "preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
  },
  {
    "path": "src/engine/action/pipe/move-item.action.ts",
    "chars": 2285,
    "preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
  },
  {
    "path": "src/engine/action/pipe/npc-init.action.ts",
    "chars": 1461,
    "preview": "import type { ActionPipe } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engine/action/hook/a"
  },
  {
    "path": "src/engine/action/pipe/npc-interaction.action.ts",
    "chars": 3703,
    "preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
  },
  {
    "path": "src/engine/action/pipe/object-interaction.action.ts",
    "chars": 3990,
    "preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
  },
  {
    "path": "src/engine/action/pipe/player-command.action.ts",
    "chars": 4703,
    "preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
  },
  {
    "path": "src/engine/action/pipe/player-init.action.ts",
    "chars": 1272,
    "preview": "import type { ActionPipe } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engine/action/hook/a"
  },
  {
    "path": "src/engine/action/pipe/player-interaction.action.ts",
    "chars": 2927,
    "preview": "import type { RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engine/action/hoo"
  },
  {
    "path": "src/engine/action/pipe/prayer.action.ts",
    "chars": 2163,
    "preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
  },
  {
    "path": "src/engine/action/pipe/region-change.action.ts",
    "chars": 5924,
    "preview": "import type { ActionPipe } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engine/action/hook/a"
  },
  {
    "path": "src/engine/action/pipe/spawned-item-interaction.action.ts",
    "chars": 3770,
    "preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
  },
  {
    "path": "src/engine/action/pipe/task/queueable-task.ts",
    "chars": 3554,
    "preview": "import type { ActionHook } from '@engine/action/hook/action-hook';\nimport { ActorTask } from '@engine/task/impl/actor-ta"
  },
  {
    "path": "src/engine/action/pipe/task/walk-to-actor-plugin-task.ts",
    "chars": 3197,
    "preview": "import type { ActionHook } from '@engine/action/hook/action-hook';\nimport type { ItemOnNpcAction } from '@engine/action/"
  },
  {
    "path": "src/engine/action/pipe/task/walk-to-item-plugin-task.ts",
    "chars": 2007,
    "preview": "import type { SpawnedItemInteractionHook } from '@engine/action/pipe/spawned-item-interaction.action';\nimport type { Ite"
  },
  {
    "path": "src/engine/action/pipe/task/walk-to-object-plugin-task.ts",
    "chars": 2937,
    "preview": "import type { ActionHook } from '@engine/action/hook/action-hook';\nimport type { ItemOnObjectAction } from '@engine/acti"
  },
  {
    "path": "src/engine/action/pipe/widget-interaction.action.ts",
    "chars": 3580,
    "preview": "import type { ActionPipe, RunnableHooks } from '@engine/action/action-pipeline';\nimport type { ActionHook } from '@engin"
  },
  {
    "path": "src/engine/config/config-handler.ts",
    "chars": 8633,
    "preview": "import 'json5/lib/register';\nimport type { ItemPresetConfiguration } from '@engine/config/item-config';\nimport { ItemDet"
  },
  {
    "path": "src/engine/config/data-dump.ts",
    "chars": 1478,
    "preview": "import { writeFileSync } from 'fs';\nimport { join } from 'path';\nimport { logger } from '@runejs/common';\nimport type { "
  },
  {
    "path": "src/engine/config/directories.ts",
    "chars": 84,
    "preview": "import { join } from 'path';\n\nexport const BUILD_DIR = join('.', 'dist', 'engine');\n"
  },
  {
    "path": "src/engine/config/item-config.ts",
    "chars": 10484,
    "preview": "import { deepMerge } from '@engine/util/objects';\nimport type { SkillName } from '@engine/world/actor/skills';\nimport { "
  },
  {
    "path": "src/engine/config/item-spawn-config.ts",
    "chars": 1687,
    "preview": "import { Position } from '@engine/world/position';\nimport { loadConfigurationFiles } from '@runejs/common/fs';\n\nexport i"
  },
  {
    "path": "src/engine/config/music-regions-config.ts",
    "chars": 1103,
    "preview": "import * as musicRegionsFile from '../../../data/config/music/musicRegions.json';\n\nexport interface MusicRegionsConfigur"
  },
  {
    "path": "src/engine/config/npc-config.ts",
    "chars": 5932,
    "preview": "import type { QuestRequirement } from '@engine/action/hook/action-hook';\nimport type { DefensiveBonuses } from '@engine/"
  },
  {
    "path": "src/engine/config/npc-spawn-config.ts",
    "chars": 1435,
    "preview": "import type { Direction } from '@engine/world/direction';\nimport { Position } from '@engine/world/position';\nimport { lo"
  },
  {
    "path": "src/engine/config/quest-config.ts",
    "chars": 1952,
    "preview": "import type { npcInteractionActionHandler } from '@engine/action/pipe/npc-interaction.action';\nimport type { Npc } from "
  },
  {
    "path": "src/engine/config/shop-config.testskip.ts",
    "chars": 4747,
    "preview": "import { findItem } from '@engine/config/config-handler';\nimport type { Shop, ShopConfiguration } from '@engine/config/s"
  },
  {
    "path": "src/engine/config/shop-config.ts",
    "chars": 8319,
    "preview": "import { findItem, widgets } from '@engine/config/config-handler';\nimport type { ItemDetails } from '@engine/config/item"
  },
  {
    "path": "src/engine/interface/interface-state.ts",
    "chars": 9677,
    "preview": "import type { Player } from '@engine/world/actor/player/player';\nimport type { ItemContainer } from '@engine/world/items"
  },
  {
    "path": "src/engine/net/inbound-packet-handler.ts",
    "chars": 1838,
    "preview": "import { BUILD_DIR } from '@engine/config/directories';\nimport type { Player } from '@engine/world/actor/player/player';"
  },
  {
    "path": "src/engine/net/inbound-packets/add-friend.packet.ts",
    "chars": 359,
    "preview": "import type { PacketData } from '@engine/net/inbound-packet-handler';\nimport { longToString } from '@engine/util/strings"
  },
  {
    "path": "src/engine/net/inbound-packets/add-ignore.packet.ts",
    "chars": 366,
    "preview": "import type { PacketData } from '@engine/net/inbound-packet-handler';\nimport { longToString } from '@engine/util/strings"
  },
  {
    "path": "src/engine/net/inbound-packets/blinking-tab-click.packet.ts",
    "chars": 616,
    "preview": "import type { PacketData } from '@engine/net/inbound-packet-handler';\nimport type { Player } from '@engine/world/actor/p"
  },
  {
    "path": "src/engine/net/inbound-packets/button-click.packet.ts",
    "chars": 475,
    "preview": "import type { PacketData } from '@engine/net/inbound-packet-handler';\nimport type { Player } from '@engine/world/actor/p"
  },
  {
    "path": "src/engine/net/inbound-packets/character-design.packet.ts",
    "chars": 1149,
    "preview": "import type { PacketData } from '@engine/net/inbound-packet-handler';\nimport type { Player } from '@engine/world/actor/p"
  },
  {
    "path": "src/engine/net/inbound-packets/chat.packet.ts",
    "chars": 577,
    "preview": "import type { PacketData } from '@engine/net/inbound-packet-handler';\nimport type { Player } from '@engine/world/actor/p"
  },
  {
    "path": "src/engine/net/inbound-packets/command.packet.ts",
    "chars": 902,
    "preview": "import type { PacketData } from '@engine/net/inbound-packet-handler';\nimport { type Player, Rights } from '@engine/world"
  },
  {
    "path": "src/engine/net/inbound-packets/drop-item.packet.ts",
    "chars": 623,
    "preview": "import type { PacketData } from '@engine/net/inbound-packet-handler';\nimport type { Player } from '@engine/world/actor/p"
  },
  {
    "path": "src/engine/net/inbound-packets/examine.packet.ts",
    "chars": 946,
    "preview": "import type { PacketData } from '@engine/net/inbound-packet-handler';\nimport { activeWorld } from '@engine/world';\nimpor"
  },
  {
    "path": "src/engine/net/inbound-packets/item-interaction.packet.ts",
    "chars": 3742,
    "preview": "import type { PacketData } from '@engine/net/inbound-packet-handler';\nimport type { Player } from '@engine/world/actor/p"
  },
  {
    "path": "src/engine/net/inbound-packets/item-on-item.packet.ts",
    "chars": 1896,
    "preview": "import { widgets } from '@engine/config/config-handler';\nimport type { PacketData } from '@engine/net/inbound-packet-han"
  },
  {
    "path": "src/engine/net/inbound-packets/item-on-npc.packet.ts",
    "chars": 1709,
    "preview": "import { widgets } from '@engine/config/config-handler';\nimport type { PacketData } from '@engine/net/inbound-packet-han"
  },
  {
    "path": "src/engine/net/inbound-packets/item-on-object.packet.ts",
    "chars": 2956,
    "preview": "import { widgets } from '@engine/config/config-handler';\nimport type { PacketData } from '@engine/net/inbound-packet-han"
  },
  {
    "path": "src/engine/net/inbound-packets/item-on-player.packet.ts",
    "chars": 1783,
    "preview": "import { widgets } from '@engine/config/config-handler';\nimport type { PacketData } from '@engine/net/inbound-packet-han"
  }
]

// ... and 288 more files (download for full content)

About this extraction

This page contains the full source code of the runejs/server GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 488 files (31.1 MB), approximately 610.3k tokens, and a symbol index with 1104 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!