Skills & Progression
Hyperscape features a skill-based progression system where skills level independently through use. The XP formula and combat level calculation are authentic recreations of Old School RuneScape mechanics.Skills are managed by
SkillsSystem in packages/shared/src/systems/shared/character/SkillsSystem.ts.Available Skills
Combat Skills
Gathering Skills
Tool Validation (Updated March 2026): The gathering system now uses manifest-based tool validation to prevent cross-skill usage. Each tool in
tools.json declares its skill explicitly (“woodcutting”, “mining”, “fishing”). This prevents exploits like using a pickaxe to cut trees.Support Skills
Artisan Skills
Smithing is a two-step process: first smelt ores into bars at a furnace, then smith bars into equipment at an anvil. Smithing now supports outputQuantity for multi-output recipes (e.g., 15 arrowtips per bar).
Crafting uses thread (5 uses per item) for leather/dragonhide armor. Tanning converts hides to leather at tanner NPCs for a coin fee. Crafting features auto-select when only one recipe matches the input item.
Fletching produces multiple items per action (e.g., 15 arrow shafts per log). Quantity selection refers to actions, not output items. Fletching UI groups recipes by category for easier navigation.
Runecrafting is instant (no tick delay). Multi-rune multipliers grant additional runes per essence at higher levels (e.g., 2x air runes at level 11). Each altar is tied to a specific rune type and features mystical particle effects.
Prayer Training
Prayer is trained by burying bones dropped from combat:
Bury Mechanics:
- Right-click bones in inventory → “Bury”
- 2-tick (1.2 second) delay between burials
- XP granted immediately on successful bury
- Bones consumed after burying
See Prayer System for complete prayer mechanics, drain formulas, and altar usage.
XP Formula
The XP table uses the authentic RuneScape formula. Level 92 represents the halfway point to 99 in total XP.XP Requirements by Level
Level Calculations
Get Level from XP
XP to Next Level
Progress Percentage
Combat Level
Combat level is calculated from combat skills using the OSRS formula. Magic and Prayer are now included in the calculation.Magic & Prayer Persistence: Magic and Prayer skills now persist to the database. Previously, these skills were not saved between sessions.
Combat Level Examples
Total Level
Total level is the sum of all skill levels.Maximum Total Level
With 17 skills at level 99: 1,683 total levelNew Skills Added: Crafting, Fletching, and Runecrafting are now fully implemented with OSRS-accurate mechanics, recipes, and XP formulas. All three skills persist to the database and integrate with the skill guide panel.
XP Sources
Combat XP
Gathering XP
Gathering resources is now defined inmanifests/gathering/ with OSRS-accurate XP values:
Woodcutting (gathering/woodcutting.json):
Mining (
gathering/mining.json):
Mining Depletion (Updated March 2026): Mining rocks use manifest-based
depleteChance values. Regular ore rocks have depleteChance: 1.0 (always deplete after yielding ore). Rune essence rocks have depleteChance: 0 (never deplete, OSRS-accurate). Success rate depends only on Mining level, not pickaxe tier. Pickaxe tier affects roll frequency (speed), not success chance.Resource Respawn (Updated March 2026): All resource respawns are now purely tick-based and deterministic (OSRS-accurate). The
ResourceSystem.processRespawns() method handles all respawn timing via tick counting. Legacy setTimeout-based respawn has been removed for reliability.Pickaxe Speed Bonuses
Dragon and Crystal pickaxes have a chance for bonus speed:The bonus speed roll is server-authoritative to prevent client/server desyncs.
Mining Mechanics: Rocks always deplete after yielding one ore (100% depletion chance). Success rates are OSRS-accurate and depend only on Mining level, not pickaxe tier. Pickaxe tier affects roll frequency (speed) only. The bonus speed roll for Dragon/Crystal pickaxes is server-authoritative to prevent client/server desyncs.
Model Scale Normalization
Mining rocks (and all resources) now have normalized model scales to prevent “squished” or “stretched” appearance:This normalization runs once when a model is first loaded, before caching. All clones will have correct proportions.
gathering/fishing.json):
Artisan XP
Processing recipes are defined inmanifests/recipes/ with OSRS-accurate XP values:
Crafting (recipes/crafting.json):
Thread has 5 uses before being consumed. Tanning converts hides to leather for a coin fee (no XP).
recipes/fletching.json):
Fletching produces multiple items per action for arrows/shafts (15 per action). Arrowtips are created via Smithing (15 per bar).
recipes/runecrafting.json):
Runecrafting is instant (no tick delay). Multi-rune levels grant +1 rune per essence. Example: At level 22, you get 3 air runes per essence (base 1 + level 11 threshold + level 22 threshold).
recipes/smelting.json):
Iron ore has a 50% success rate when smelting - failed attempts consume the ore but grant no bar or XP.
recipes/smithing.json):
Smithing requires a hammer in inventory and access to an anvil. Recipes are organized by category:
Weapons:
Armor:
Tools:
Smithing recipes support “Make X” functionality - players can smith multiple items in one session. The system remembers the last custom quantity entered.
recipes/cooking.json):
Food Consumption Mechanics
Food consumption follows OSRS-accurate timing and combat integration: Eating Delay:- 3-tick (1.8s) cooldown between eating foods
- Managed by
EatDelayManager(per-player tracking) - Food consumed only after validation passes
- Message shown even at full health: “You eat the shrimp.”
- Eating during combat adds 3-tick delay to attack cooldown
- OSRS rule: Only adds delay if weapon is already on cooldown
- If weapon is ready to attack, eating does NOT add delay
- Prevents eating from being used to delay attacks strategically
- Rate limiting (3 requests/sec)
- Input validation (slot bounds, item ID mismatch detection)
- Heal amount capped at 99 HP (prevents manifest exploits)
- Server-side eat delay enforcement
Food is consumed even at full health (OSRS-accurate). The eat delay and attack delay still apply.
recipes/firemaking.json):
Firemaking Mechanics
OSRS-Accurate: Players must stand still while lighting fires. Movement during the lighting animation cancels the action.
- Player clicks logs with tinderbox (or tinderbox on logs)
- Player movement is stopped automatically
- Lighting animation plays (3 seconds)
- Fire spawns at the position where lighting began
- Logs are consumed, XP is granted
- Fires burn for a limited time (configurable per log type)
- When fires extinguish, they spawn ashes as a ground item
- Ashes despawn after 2 minutes
- Fire models use bounding box snapping to sit flush on terrain
Level Requirements
Skills gate access to equipment and activities. Requirements are now centralized intier-requirements.json and skill-unlocks.json.
Tier-Based Equipment Requirements
Equipment now uses a tier system that automatically looks up requirements: Melee Weapons & Armor (Attack/Defence):
Tools (Woodcutting/Mining):
Gathering Resource Requirements
Defined ingathering/*.json:
Woodcutting:
Mining:
Mining Success Rates (OSRS-Accurate)
Mining success rates depend only on Mining level, not pickaxe tier. Pickaxe tier affects roll frequency (speed) only. The formula uses linear interpolation between low and high values:Pickaxe Speed Bonuses
Pickaxe tier determines roll frequency (ticks between attempts):Dragon/Crystal Pickaxe Bonus: These pickaxes have a chance to trigger a faster roll. The server rolls this randomly and applies it deterministically to prevent client/server desyncs.
Processing Recipe Requirements
Defined inrecipes/*.json:
Smelting: Levels 1-85 (Bronze to Rune bars)
Smithing: Levels 1-91 (Bronze to Rune equipment)
Cooking: Levels 1-80 (Shrimp to Shark)
Firemaking: Levels 1-75 (Normal to Magic logs)
Smithing Requirements
Resource Respawn System (Updated March 2026)
Tick-Based Respawn: All resource respawns are now handled byResourceSystem.processRespawns() via deterministic tick counting (OSRS-accurate). Legacy setTimeout-based respawn has been removed.
How It Works:
- When a resource depletes,
depletedAtTickis set to current tick ResourceSystem.processRespawns()runs every tick- Checks if
currentTick - depletedAtTick >= respawnTicks - If true, resource respawns deterministically
- Deterministic: Same respawn timing every time (no setTimeout variance)
- OSRS-Accurate: Matches Old School RuneScape tick-based mechanics
- Reliable: No race conditions or missed respawns
- Testable: Predictable behavior for integration tests
- Mining now reads
depleteChancefrom manifest instead of hardcoded constants - Regular ore rocks:
depleteChance: 1.0(always deplete) - Rune essence rocks:
depleteChance: 0(never deplete, OSRS-accurate) - Allows per-resource depletion behavior without code changes
packages/shared/src/systems/shared/entities/gathering/ResourceSystem.ts):
Anti-Exploit Protections
Resource Spam Click Prevention
The gathering system prevents duplicate harvesting when players spam-click resources:- Duplicate gather requests for the same resource are silently ignored
- Prevents timer resets and duplicate drops
- Allows switching to different resources (cancels old session first)
- Guard clause executes after resource resolution for accurate comparison
This fix prevents the spam-click exploit where players could reset gathering timers by rapidly clicking the same resource.
Tool Validation System (Updated March 2026)
Manifest-Based Validation (PR #1098): The gathering system now usestools.json manifest as the single source of truth for tool-to-skill mappings.
Problem Solved: Substring matching allowed pickaxes to cut trees and hatchets to mine rocks because “pickaxe” contains “axe”.
Solution: Each tool declares its skill explicitly in the manifest:
- Prevents cross-skill tool usage (pickaxe for woodcutting, hatchet for mining)
- Eliminates false positives from combat weapons (battleaxe, greataxe)
- Maintains OSRS-accurate fishing tool behavior (exact match required)
- Forces all gathering tools to be in manifest for proper validation
Fallback Warnings: If a tool is not in the manifest, the system logs a warning and uses fallback substring matching. Add all tools to
tools.json to eliminate warnings and ensure proper validation.Skill Events
The system emits events for UI updates and logging:Milestones
Special milestones trigger events and messages:API Reference
Grant XP
Check Requirements
Set Level (Admin)
Reset Skill
Skill Unlocks
Theskill-unlocks.json manifest documents what players unlock at each level. This is used for UI display and progression tracking.
Example unlocks:
- Attack 40: Rune weapons
- Attack 60: Dragon weapons
- Woodcutting 15: Oak trees
- Mining 30: Coal
- Cooking 40: Lobster
- Smithing 50: Mithril bar
See
manifests/skill-unlocks.json for the complete list of unlocks for all skills.Manifest-Driven Design
All skill-related data is now defined in JSON manifests:tier-requirements.json- Equipment level requirements by tierskill-unlocks.json- What unlocks at each levelgathering/*.json- Resource nodes, yields, and XPrecipes/*.json- Processing recipes and XP
Related Documentation
- Prayer System (Prayer mechanics, drain, altars, bone burying)
- Combat System (Prayer bonuses in combat)
- Data Manifests Overview
- Item Data Structure
- NPC Data Structure