team

Create

Build it while they’re standing in it

There are two ways to make something here, and they are genuinely different things rather than a beginner mode and an advanced one. xo builds the room. xp builds the experience.

A prototype arena on two floors: a catwalk down one side, a gallery of targets on the far wall, breakable cover, crates and barrels

xp

Build a game, not a level

Most world builders give you somewhere to stand. This gives you somewhere to play: things that break, targets that count, a gun in your hand, and other people in the room with you. It runs in a browser, there is nothing to compile, and a game is one file — the file is the whole game.

What it does

Pieces, rules, scripts, and other people

  • Build it out of packs

    Eighty-six prototype models — walls, floors, slopes, stairs, crates, targets. Drag one in and it lands where you let go. Collision is worked out once, when the level opens, so a room of four thousand pieces costs the same to walk around as a room of four.

  • Give things rules

    A crate that breaks, a pickup that refills you, a barrel that takes you with it. Rules are rows in a panel rather than code: four events, six comparisons, eight verbs. There is nothing you can write that fails while somebody is playing.

  • Write a script when a rule won’t do

    A platform that rises, a turret that tracks, a door that opens as you approach. JavaScript in a sandbox, three hooks, and no way to reach the network — so a level somebody else wrote is a level you can safely open.

  • Play it with other people

    A match is a room. Everybody who joins sees each other move, in the level you built, under the rules you gave it. Send a link and somebody outside your space walks in.

Two players standing on the green platforms of an xp parkour level called Sidestep, a clock running above them, and a panel below reading waiting to start with one of two ready
A level called Sidestep with two people in it, one of them a guest who came through a link. Same level, same rules, and each of them can see the other move. A match is a room — there is no separate server to rent and nothing for either of them to install.

p5.js

Or skip all of that and write a sketch

A third kind of cartridge, beside the level and the world. Not pieces and not rules — a p5.js sketch, source and all, kept in the document itself. You write it in the browser, press Run, and it is running.

  • Real JavaScript, and a real canvas

    setup() and draw(), the way p5 has always been. A DOM, requestAnimationFrame, WebGL — everything the rules engine deliberately does not have, which is exactly when you want this instead of that.

  • Multiplayer, and no netcode

    Write xp.avatar.x in your draw loop and everybody else sees you move, smoothed, without a line of networking. xp.players is who is in the room. xp.input is one movement axis whether they are on arrows, on WASD, or on a thumbstick drawn over a phone.

  • It runs in a box with the door shut

    An opaque-origin frame: our cookies are not its cookies, our storage is not its storage, and the only way through the wall is one message channel. Nothing loads that we did not serve, and there is no route to the network at all — so a sketch somebody else wrote is one you can open.

  • Files, and the entry runs last

    Split it up as you would anywhere else. Each file is evaluated on its own, in the order you wrote them, so a syntax error in one does not take its neighbours down with it.

The sketch editor: a file list with main.js as the entry, a blurb field, a key named KeyE mapped to boost, checkboxes for where the sketch can be played, the code in the middle, the sketch running live on the right, and a console under it
Files down the left with one of them marked ENTRY, the code in the middle, and the sketch running beside it as you type. Under the files are the two decisions that are not code: which keys it wants — those become buttons on a phone — and whether it can stand as a room people walk into, or be scheduled as a match.
The sketch editor on a phone: a project called Game of Life with Run, Export and Save at the top, Files, Code and Play as tabs, a running grid of black and white cells filling the screen, and a console panel underneath
The same editor in a hand. Files, the code and the thing itself become three tabs rather than three panes, and Run is where it is on the desktop.

And it is not a toy corner of the product. A sketch that can stand as a room is a place on the shelf people walk into and leave, with a guest link into it like anywhere else — and one scheduled as a match gets a clock and a score limit your sketch reads back out of xp.match.

A p5.js sketch called Blob standing as a room: two green blobs with player names over them in the middle, the space’s own rails either side, and a panel of guest links into this sketch on the right
The same kind of document, standing as a room. Two people are in this one, each drawn by the sketch’s own draw() and moved by whoever is at the other keyboard — and the rail on the right is making a door into it for somebody with no account. It is on the shelf beside the levels, under xp5js, because as far as a space is concerned it is one more thing you can walk into.

The numbers

All measured, which is why they’re worth printing

  • 8,000

    pieces in a level

    a fifth of a second to load

  • 1,000

    things with rules

    the tighter limit — these cost per frame

  • 86

    models to build with

    and going upward. Measured, so a wall really is four metres.

Every one of those is measured rather than picked. A limit chosen by feel is a limit you find out about in front of other people.

Where it is

The player ships today. The editor is soon, out loud.

An xp space is €15 a month and gets the XP player today, plus the ability to fight a match inside an XP. The editor, XP story and XP in VR are on the price card under Soon rather than in the feature list, because that is what they are.

The xp editor: a blueprint list on the left, a 3D viewport with a wall and a barrel in the middle, a document panel of game modes below it, and a JavaScript file open in a script panel on the right
Not open yet. This is the editor as it stands today — blueprints down the left, the level in the middle, the document under it, and a script on the right that a thing in the level runs. It is behind a gate while it is being built, and it opens to everybody on an xp space later. Ask if you would like to be shown it before then.

The multiplayer half is behind a per-space flag while the beta runs. If you want it turned on, say so when you join and we’ll turn it on.

Not yet

What it doesn’t do yet

Said here rather than found out later.

  • No score comes back out of a match yet — it is a room you play in rather than a game that finishes.
  • A p5.js sketch cannot reach the network at all. That is the containment doing its job, and it does mean a sketch cannot fetch anything of its own.
  • Shots hit the level and the things in it, not other players. Nobody owns anything and nothing is reconciled.
  • Collision is cell-shaped: a wall is solid where it looks solid, to within half a metre.
  • The art is one prototype kit. It is grey on purpose, and it is the only kit so far.

Two people and a level is a game.