Player base: HP 100, MP 50, STR 14, SPD 4.5.
Per level: +40 HP, +10 MP, +3 STR, +0.05 SPD.
XP curve: 100 × 1.1(level-1).
Lv
XP to next
HP
MP
STR
SPD
1
100
100
50
14
4.5
2
110
140
60
17
4.55
3
121
180
70
20
4.6
4
133
220
80
23
4.65
5
146
260
90
26
4.7
6
161
300
100
29
4.75
7
177
340
110
32
4.8
8
195
380
120
35
4.85
9
214
420
130
38
4.9
10
236
460
140
41
4.95
Cosmetics — Adventure-Land paperdoll library
Every cosmetic option the paperdoll picker exposes, grouped by slot.
Cards painted live from each sprite sheet's region. Bodies marked
disabled
are excluded from the picker (hooded / "covers" / "no_hair" bodies
and AL's monolithic character-type sheets — none play
well with the per-layer voxel build). Search box filters by id.
Per-cosmetic height adjustments (adopted from AL's cosmetics.js)
Each cosmetic layer (head / hair / hat / gravestone) reads
a per-id offset from AL's design/cosmetics.js
tables. Qwazy adopts these verbatim — they
feed the composer's layer Y coords so swapping cosmetics
keeps every sprite at its hand-tuned position.
DEFAULTS — base offset every layer starts from. Current values:
head=7,
hair=7,
hat=7,
face=8,
makeup=0,
beard=0.
HEAD[id] = [small_skin, normal_skin, large_skin, dh] — small/normal/large pick the base skin sprite for each body size; dh shifts hair + hat up by that many source pixels when this head is on (some heads are taller than the default).
HAIR[id] = [dy, dh] — dy shifts the hair sprite up/down from the default; dh shifts hat further up (tall hair pushes the hat).
HAT[id] = dy — vertical nudge for the hat sprite only.
PROP[id] — flag list: covers (head hides under body silhouette), no_hair / no_hat / no_upper (slot suppressed), slender / bulky (alternate silhouette width), female / hair (descriptive). The first six block the body from the picker.
GRAVESTONE[id] = dy — vertical lift for the RIP sprite at death (standard 19 px, xgravestone 21 px).
Numbers below each card show only non-zero offsets — anything missing reads as 0. See the rule in
design/cosmetics.md §"Height adjustments imported from AL".
Loading cosmetics library…
Bestiary (40) — every monster, sorted by tier
Each card shows the player-facing name, the canonical
id (used by every internal map: drop tables, spawn-zone
slots, idle targetMobs, info-on-approach lookups,
ledger keys), and the underlying sprite asset filename. NPC level
rolls in [1..6] at spawn; the per-species
tier multiplier scales HP / STR / XP on top of that. Stats
below come from npcStatsAt(level, tier) in
world.js.
Per-biome render rules. Tile crops below are rendered live from each
sheet onto a canvas at 4× scale so what you see is exactly what the
renderer pulls. Source: manifest.js#BIOMES.
Sprite cut-outs extruded into 3D — walls, roofs, towers, banners.
Each entry references a region of a PNG; place them in a world via
the editor's wall (ground) and high
(air) tools, or by hand in worlds/<name>.json's
cardboards array. Front + back faces use the source pixel
colours; alpha pixels are passable both visually (no geometry) and
physically (the alpha mask is baked into the world's sub-cell
collision grid). The edge tone paints the side faces
you'd see if you cut the print and looked at the cross-section.
Source: manifest.js#CARDBOARDS. Spec:
design/structures.md; editor walkthrough:
design/editor.md.
Scheduled, time-boxed encounters that flip on at fixed
UTC slots, draw players together for a short
window, and reward a cosmetic-only currency. Each card shows the
internal id (used by the scheduler, the
event_state wire frame, the /cheat eventfire
admin command, and the i18n key prefix), the player-facing name +
description, the schedule, and the arena/boss details. Source:
manifest.js#EVENTS. Full spec:
design/events.md.
Design picks baked into these: the UTC schedule is
shared across every shard (EU I, EU II, US I) so a Slime Surge
fires at the same instant worldwide; each shard renders the
time in its own region's timezone. Tokens never buy stats —
the Token Broker stock below is strictly cosmetic, keeping the
anti-power-creep doctrine intact.
Slime Surgegoobrawltemporary arena
Slimes spill across a sealed arena for twelve frenzied minutes. Bring a friend or two — the swarm pays out Goo Tokens for every wobble felled, and the Slime King at the centre is worth the trip on his own.
arena:worlds/goobrawl.json
— 40×40 cells, player spawn (20,20) spawns:slime ×4 in (5,5)→(35,35) · slime ×4 in (5,5)→(35,35) · slime_king ×1 in (18,18)→(22,22)
Giga Crabgigacrabworld boss
Twice a night, an enormous crab claws its way into the western fields. He hits hard and dies slow — gather a party and pile on. Every player who lands a blow walks away with Crab Tokens.
host world:outside3
, spawn (64,64) boss sprite:minotaur
· scaling:
HP ×25, STR ×1.4, XP ×12
· drop: 6 tokens to each damager
Token Broker stock
What the event currencies redeem for at the Token Broker NPC
(Curio, in town). Cosmetic-only by rule — see
manifest.js#TOKEN_SHOP_STOCK.
Item ID
Name
Description
Price
GOO_HAT
Slime Crown
A wobbling green coronet, still cool to the touch. Marks you as a Slime Surge survivor — purely a vibe, no stats.
25 Goo Token
CRAB_PAULDRONS
Crab Pauldrons
Polished crustacean plates, paired and strapped. They click when you walk. Worn for the bragging rights, not the armour.
12 Crab Token
Named tile sets (9)
Reusable ground materials addressable by name (e.g.
defaultTile: 'grass' in a world definition; future
editor tile-paint tool picks from this list). Source:
manifest.js#TILES.