A battle royale on the inside of a hollow world
Look up and you see the other half of the map. Climb high enough and you can fall into it. Concept notes and a feel prototype; the name is a working title.
The sky is the other half of the map
The map is the inside surface of a sphere or an ellipsoid. A field holds you to the shell and fades with altitude, so the middle of the world is a weightless void with a glowing core, the Heart. Everything you see overhead is playable ground. Gates fold the surface together: walk through one and you come out somewhere else, still moving, and the world turns to put your feet down again.
The sky is the map
A concave world has no horizon. Every fight, storm front and drop pod is visible overhead, and so are you. Seeing everything is the hook; controlling what can be seen is the design work (§4).
Height is speed
Gravity is strong at the ground and almost gone 70 m up. A spire top turns a 42 m/s launch into an 11 m/s hop, so climbing is how you buy a crossing to the far side (§2).
Space is folded
Gates are see-through and shoot-through, and they keep your momentum. They connect places the shell keeps apart, including a point and the point directly over its head (§5).
What the prototype above already does
- Three worlds you can switch between: Hollow (sphere), Lens (two facing plates joined by a rim) and Rama (a tube with domed caps). Each can be scaled from 0.4× to 1.4× in the pause menu, so the Hollow runs from a 60 m sphere to a 210 m one.
- Skin gravity, lift beams up launch spires (one column the deck's width, so nothing overhangs), sling pads, and drifters: floating rocks with their own small gravity wells.
- The camera re-levels by rolling about your view axis when "down" flips mid-flight.
- Three live see-through gate pairs: Antipode, Sling and Drift. You can walk, shoot and throw through them.
- A first-person gun with recoil, spread, a 24-round magazine and reloads, plus an under-barrel launcher whose skyshells arc along the field. It is the classic black rifle the bunnies hold, in black metal that takes its shape from the sky it reflects (the holes don't shine), and drawn as a projection like them: a mint rim and the red and cyan fringe. Its bore runs parallel to your view, so it points at the reticle at any range. Your own chunky plush paws hold it, the left one pumping the launcher (Paws in the pause menu turns them off). A reload is a little show: the gun cants to show its magazine well, the left paw strips the old magazine and flicks it away (it glitches out as it falls, being a projection), a new one prints into the paw on the way up, clasped round its body, rocks in front lip first and seats with a slap, then the paw lets go and boops it from below; from empty it goes from the magazine straight up to slap the bolt catch instead. The rounds go in at the seat (1.15 s, or 1.45 s from empty) and firing skips the rest; a skyshell launch cuts a reload short. A fall-arc preview shows where you will land.
- The Skylance, a long-range launcher on key 2, an RPG's lines in the rifle's black metal. Its round sits in the mouth, a fat warhead whose belly band glows as the lock builds; two lamps on the back of the front sight show the rounds left. A shot kicks the round out of the mouth and its motor lights a beat later, then it tears off along the path you aimed; the next round prints in half a second on, and after the last the left paw loads a new one and boops its nose. In flight the round shows its motor and four fins. Hold right mouse and its whole flight is solved ahead of time, with the same step the round will fly with. The path, the landing ring and the flight time show in your view, through gates too, and the map becomes a to-scale side view of the shot. It fires only after a short steady lock. Everyone near the landing point sees a warning ring with a countdown, and bots run from it, more slowly when they are mid-fight. Inside the ring's inner 6 m nobody survives; from there to its 9 m rim the blast falls from 90 to 30 damage and shoves people away. A building between you and the blast stops it. Rocks and the Heart pull its rounds three times harder, over twice their usual reach, so a shot aimed just past a rock curves around it and can land on someone hiding behind it. A faint vermilion rim marks that reach while you aim, and the pause menu has a dial for it (1× gives rounds the same field as you).
- The grapple on key 3: a speargun-shaped grapple gun in the rifle's black metal, its hook's three claws folded back round the mouth and its reel hung under the barrel. The hook bites anything built or floating within 56 m (a mint ring marks where), and aiming low on a wall hands it up to the roof edge, or a spire's deck. Hold the trigger to ride the line in; on a roof edge it aims over the edge and, once your feet are over, flings you on the way you look with most of your speed plus a bonus for the line you reeled in. On a drifter or the Heart it holds you on a rope so you whip round. Let go any time to fly on. Two hooks, 3 s each to come back, with a lamp on the gun for each. The design and its measured flights are on The grapple.
- Hit feedback: damage numbers that add up over each target (amber for the head, vermilion for blasts), a distinct headshot sound, a kill banner that counts your kills this life with a rising chime, a line on where each Skylance round landed and what it did, and a combat report of damage dealt and taken when you go down.
- Bots that move with the same physics and fire the same gun, dressed as bunnies. A dash on the ground is one long bound, sized to how far the burst carries them. They react after a delay, aim off at first and settle, fire in bursts, strafe and dodge, and cross the void on pads and lifts. Their number, skill and skin (bunny or the old capsule) are set in the pause menu.
- A map centred on you whose rim is your antipode, and sound that arrives late across the void.
- The field, haze and camera comfort settings are all tunable from the pause menu.
Not in it yet: other people, loot, the zone, netcode. It exists to answer one question: does moving, seeing and fighting in this world feel good?
Shape and size
Inside a convex shell, the straight line between any two points on the surface stays inside. So in principle everybody can see everybody, and anything you throw hard enough lands somewhere on the map. Both facts are the point of the game, and both need managing.
How big
Battle royales are sized by area per player. For a sphere, R = √(N · a / 4π), where N is the player count and a is the area per player. The void adds playable volume on top of the surface area, so the target sits between Warzone's small Rebirth Island and Apex.
| Density basis | Area per player | 40 players | 60 players |
|---|---|---|---|
| Rebirth Island (Warzone, 40 players) | 3,800 m² | R 110 m | R 135 m |
| Proposed: fast and vertical | 12,500 m² | R 200 m | R 245 m |
| Apex, Kings Canyon (60 players, 1.8 km²) | 30,000 m² | R 309 m | R 378 m |
| This prototype | 0.12 km² total | R 98 m by default (0.65×); the pause menu scales it from 60 to 210 m | |
Three shapes, three games
- Hollow (sphere). Every point is equivalent and every point has a true antipode. It gives the cleanest map (§6) and the purest version of the idea. Start here.
- Lens (oblate). Two nearly flat worlds face each other 190 m apart, like the film Upside Down, joined by a tight rim (radius of curvature about 49 m). The rim is a half-pipe that carries you from floor to ceiling without leaving the ground. It suits team modes: your plate against theirs.
- Rama (prolate). A tube with domed caps. Across the waist is close (220 m) and along the axis is far (460 m), which makes natural lanes. The long sightline down the axis needs cover.
On an ellipsoid, "down" is the gradient of the ellipsoidal radius ρ = |(x/a, y/b, z/c)|. That gradient is exactly normal to the shell, so buildings stand upright everywhere and the same code serves all three shapes.
Gravity that fades with height
A real hollow planet would be weightless inside. Newton's shell theorem says a uniform shell pulls on nothing it contains, so something else has to hold players to the ground. I compared three candidates.
| Field | Falling to the ceiling | How it feels | Verdict |
|---|---|---|---|
| Spin O'Neill, Rama. a = ω²r⊥ in the rotating frame | Free flight is a straight line in the non-rotating frame. At r 150 m and 2 g, a jump from a tower lands about 26° behind it, nowhere near overhead. | 3.45 rpm. Coriolis of 0.74 g at a 10 m/s run. Running with or against the spin changes your weight from 2.8 g to 1.3 g. The poles are weightless. | fights the fantasy |
| Linear push a = k·r, k = g₀/R | Each axis has a closed form, x(t) = x₀ cosh ωt + (v₀/ω) sinh ωt. To cross you need v > ω·r₀: 57 m/s from the ground and still 35 m/s from a 58 m spire. | Same gravity everywhere on the ground. Height barely helps, so towers would have to nearly reach the centre. | keep for the server |
| Skin gravity g₀·e^−(h/H)² plus a faint drift | 42 m/s from the ground, 25 m/s from a 30 m roof, 11 m/s from a 58 m spire. | A normal shooter below about 20 m. Floaty on rooftops. A true void above 68 m. | use this |
g₀ = 22 m/s² H = 0.3 × shortest semi-axis (45 m in the Hollow) δ = 0.02
energy to reach the void from h₀ ≈ g₀ · H · (√π / 2) · erfc(h₀ / H)
void line: g = 0.1 g₀ at h = H·√(ln 10) ≈ 1.52 H = 68 m
The Gaussian puts almost all of the climb into the first 40 metres. Near the ground the game plays like a normal shooter at about twice Earth gravity, which is typical for snappy games. A rooftop is floaty. Above the void line you drift, and whichever side you drift toward wins you. The small linear drift term means nobody can park at the centre forever.
- Needed to reach the void
- Launch
- Time in the air
- Lands on
- Impact speed
Arrows show the field, bolder where it is stronger. Dots on the path are one second apart. Same formula as the prototype, including the Heart's small well.
Measured in the prototype
| Move (1× world) | Hollow | Lens | Rama |
|---|---|---|---|
| Lift beam to the spire deck | 6.4 s · 59 m | 4.8 s · 38 m | 5.3 s · 43 m |
| Gravity on the deck | 3.9 m/s² | 3.7 m/s² | 3.8 m/s² |
| Deck jump + air dash, aimed just off the Heart | 12.8 s · lands 167° around | 8.2 s · 145° | 7.1 s · 170° |
| Sling pad on the deck | 22 m/s · 10.6 s · 149° | 19 m/s · 8.2 s · 167° | 20 m/s · 9.0 s · 174° |
| Ground pad | 50 m/s · 6.6 s · 93° | 40 m/s · 8.1 s · 151° | 43 m/s · 8.6 s · 144° |
| Landing speed after a crossing | 42–48 m/s | 37–39 m/s | 20–42 m/s |
How size changes it
Players, buildings, gates and weapons stay human-sized at every scale. What changes is the world around them. Smaller worlds get smaller towns below 0.7×, and from 1× a hamlet joins at the middle of each of the twenty faces. The towns sit on a frame shared by every size: the spawn plaza at the north pole, the Antipode at the south, and ten towns in two rings either side of a band round the middle (see Landscape). Where the ground curves tightly, a block that would lean into its neighbour is cut down. The gravity falloff height and the spires scale with the radius. Haze is rescaled so the far side fades by the same amount. Rocks only spawn where the void has room for them, with their wells clear of the ground and the spire decks.
| Hollow at | Radius | Players at 12,500 m² each | Lift | Deck jump + dash | Sling pad | Ground pad |
|---|---|---|---|---|---|---|
| 0.4× | 60 m | about 4 | 4.0 s | lands on the Heart | 5.6 s · 170° | 4.3 s · 105° |
| 0.55× | 83 m | about 7 | 4.6 s | 6.5 s · 178° | 6.9 s · 154° | 4.9 s · 98° |
| 0.65× (default) | 98 m | about 10 | 5.0 s | 7.7 s · 178°, onto a pad | 7.8 s · 153° | 5.3 s · 96° |
| 0.7× | 105 m | about 11 | 5.2 s | 8.4 s · 175° | 8.2 s · 152° | 5.2 s · 89° |
| 1× | 150 m | about 23 | 6.4 s | 12.8 s · 167° | 10.6 s · 149° | 6.6 s · 93° |
| 1.4× | 210 m | about 44 | 8.2 s | 18.3 s · 157° | 13.2 s · 147° | 8.8 s · 106° |
Crossing time grows roughly with the radius. Small worlds cross in 4–7 seconds, a good fit for duels and 2v2. The player counts use the battle royale density from §1; an arena mode would pack players tighter. At 0.4× the scripted deck jump comes down on the Heart, because the void is small enough that the Heart and the rocks sit on the obvious lines.
A crossing of 7–12 seconds is long enough to read as an event and short enough to stay fast. At 1.4×, close to the 200 m match world, crossings take 9–18 seconds, so that world will need a stronger air dash or a void boost to keep them under ten. Pads aim themselves. Each one tries eight headings 16–18° off vertical and keeps the one that lands farthest around without hitting a drifter or the Heart. Launching straight up was a bug: everything aimed at the centre got caught by the Heart's well.
What this does to level design
- Verticals converge. Every "up" points at the centre, so two 60 m towers 10 m apart at the ground are 6 m apart at the top of a 150 m world. The first lift beams leaned into their own spire's deck. Beams now run parallel to the spire, and bridges between rooftops get shorter the higher they are.
- Spires are launch towers. A glowing lift beam carries you up. From the deck, a jump plus an air dash crosses the void, and a sling pad crosses it for you.
- Landings are fast. Crossing lands you at 35–50 m/s, so there is no fall damage. Landing is a slam instead: a shock ring and screen shake now, an area-damage ability later. The cost is exposure: while you cross, you are a slow meteor that the whole world can see.
- Drifters and the Heart add wells to the field, like Super Mario Galaxy's planetoids. Paths bend around them, so a near miss of the Heart is a slingshot.
- Fast rounds get their own wells. How much a well bends a shot and how hard it is to climb out of it are the same quantity: the bend goes with the square of the well's escape speed over the shot's speed. A rock already takes 12–14 m/s to leave, more than a jump. A skyshell (30 m/s) skimming one bends 10–17°; a Skylance round (85 m/s) bends 2°. Pulling hard enough to bend the round 13° would take 34 m/s to leave, so nobody who landed on a rock would get off. Skylance rounds therefore feel the rock and Heart wells three times stronger and twice as wide, and bodies keep theirs. A round passing within about 6 m of a rock bends 5–10° and lands 10–20 m from where it would have, and the landing still moves smoothly as you sweep the aim. Shots that pass nowhere near a well are untouched: in 1,500 random shots from the ground at 0.65×, the median moved 0 m and 92% moved less than 5 m. Near the Heart the change is small, under 8 m, because rounds cross the centre at about 78 m/s.
- The math is analytic and deterministic. Client prediction of the field is exact, arcs can be previewed (the fall arc in the prototype), and a server can evaluate it cheaply.
Which way is up
"Up" is wherever the field says it is. The camera has to follow that without making people sick or making them lose their aim. The prototype uses five rules.
- Small changes carry the camera along. Walking over curved ground, the camera turns by the same minimal rotation as "up" (parallel transport, the idea behind rotation-minimising frames). Without this your pitch drifts by the curvature: 11.5° after 30 m on a 150 m sphere.
- Big changes are flips, and a flip is a roll about the view axis only. Your view direction never moves, so your aim stays on target. The world turns around the crosshair at a capped speed (4.5 rad/s by default, adjustable). Rotation about one axis is measurably less sickening than combined pitch and roll.
- Look where you are going and the flip happens around your target. Crossing the void you usually look at the far side, which starts as "up" and becomes "down". The re-level then spins the image gently around the crosshair, and your aim never leaves the spot you are falling toward. Looking dead on, there is nothing to rotate at all.
- Controls follow the camera, never the world. Super Mario Galaxy's first game reversed left and right when Mario walked upside down, and players got lost. The sequel kept his head up. Here W is always "forward on screen".
- In the void, controls go fully 3D. When gravity is weak, mouse yaw turns about the camera's own axis, WASD thrusts along the view, and re-levelling slows to a third of its speed.
Seeing across the void
In a concave world everyone has a line of sight to everyone. Unmanaged, the best spot is any rooftop with a long rifle. The prototype uses haze; the full game adds four more tools.
- A haze core. Haze density is Gaussian around the Heart, and the optical depth along any sight line has a closed form (an erf), so it costs a few instructions per pixel. Short lines along the ground stay clear. Lines that pass near the centre fade. Across the Hollow, a target 90° away keeps about 73% of its contrast, 120° keeps 54%, and your antipode keeps about 19%.
- The Heart itself only blocks near-exact antipodes: beyond 175° for a 7 m core in a 150 m world. A core of R/2 would hide everything beyond 120°. Core size is the main knob between an open world and a private one.
- Canopy architecture. Roofs, awnings, arcades and trees give cover from above. Open plazas are the risky ground. Rooftops are high ground and also exposed to a whole hemisphere, so height is never free.
- Ballistics. Rifles stay hitscan inside about 150 m. Long weapons get travel time. Skyshells arc along the field and through gates, which makes artillery across the sky a skill with a visible preview.
- Sound travels at 343 m/s. A shot from the far side arrives about 0.9 s after its flash, like thunder. It gives information and it gives the world a sense of size. The prototype delays and muffles every sound by distance.
- Apart
- Distance
- Gets through
- Sound delay
Haze also hides level-of-detail changes on the far side, and that matters for rendering, because there is no horizon to hide anything behind (§9).
Gates
A gate is a rectangle that shows, and leads to, another rectangle somewhere else. One rule covers everything: crossing gate A applies the transform M = B · Ry(π) · A⁻¹ to your position, velocity and camera, and then §3 re-levels you to the local field. The same transform carries bullets, skyshells, sound and the virtual camera that draws the view.
Gate kinds in the prototype
- Antipode gate (cyan). A fixed pair joining the spawn plaza to the point directly overhead. It is a fast way across with no flight and no exposure.
- Sling gate (pink). The exit floats 63 m up, faces just past the Heart, and gives you a minimum exit speed of about 27 m/s. Walk in at a jog and 8 seconds later you land about 120° around the world.
- Drift gate (gold). The exit stands on the underside of a drifter. You arrive standing on a rock in the sky, with your old plaza hanging overhead.
Ideas for the full game
- Folds: a player-placed pair. Drop an anchor, move, then open a 12-second two-way gate between the anchor and you. It works as a periscope, an ambush and an escape.
- Phase gates that move each zone phase, so routes have to be re-learned within a match.
- A gate inside the Heart. Outer Wilds sends you through Brittle Hollow's black hole to the White Hole. Here, diving into the core could send you to the drift field or the next safe zone.
The research suggests some rules. Most gate pairs should keep local "up" the same on both sides. Rotating gates should be rare and memorable. Every exit view should include a landmark. Each pair gets a colour, and the map shows pairs as dashed links.
How the prototype draws and runs them
- Each visible gate renders the scene from a virtual camera M · C into a texture. The surface samples that texture in screen space. The virtual camera's near plane is replaced by the exit gate's plane (Lengyel's oblique clipping), so nothing behind B leaks in.
- The gate surface is a thin box behind the plane, so the view doesn't tear while your eye passes through it. Gates seen inside gates show a tint instead of recursing. The budget is three live gates per frame at 0.6× resolution.
- Hitscan and skyshells split their rays at gates and continue from the exit. Valve's Portal team used the same approach, plus duplicate models for anything halfway through. We will need those duplicates for players.
Finding your way
A normal minimap shows a flat patch around you. Here the whole world is around you, and the most important place is the one straight overhead. So the map is an azimuthal equidistant projection centred on you. Distance from the centre is distance along the ground. The 90° ring is where the floor becomes the wall. The rim is your antipode: everything on it is directly over your head.
- On non-spheres the same map is the logarithmic map of the surface. The Vector Heat Method computes it, along with geodesic distances, on any mesh in milliseconds (Sharp, Soliman & Crane 2019; Crane et al. 2013). Karney's algorithms give exact geodesics on ellipsoids, including triaxial ones.
- Landmarks you can steer by: the Heart (always roughly "up"), the launch spires and their glowing lifts, gate colours, the band round the middle, and each region's own flowers, cooler toward the north and warmer toward the south. Manifold Garden's playtesters got lost in its wraparound gravity. Strong regional identity is the cheap fix.
The match
The match is 40 players in a world about 200 m in radius, aiming for 12 to 15 minutes. The geometry gives the battle royale shape three moments no flat map can have.
- The drop. Pods ring the Heart. Everyone starts weightless at the centre, sees the whole world at once, and pushes off toward any point of it. There is no flight path, because every landing spot is equally far away.
- The Eclipse. The safe zone is a spherical cap that shrinks (area 2πR²(1 − cos θ)). The storm grows from the opposite point, so the threat is literally overhead, and everyone can watch the zone close on the far side while they fight.
- The Heart finale. In the last phase the storm covers the whole shell, and the safe zone becomes a sphere of void around the Heart, shrinking inward. The final fight is weightless and fully 3D among the drifters, like Descent, Shattered Horizon or Echo VR's arena.
Loot and abilities that use the geometry
- Mobility: jump jets, the grapple (a hook on a cable that bites buildings and wells and reels you in, designed on its own page), Fold charges (§5), and a sling grenade that drops a temporary pad.
- Field tools: a gravity grenade that flips the field locally for four seconds, and a plumb scanner that marks who is directly above you.
- Weapons: a hitscan rifle for the floor fight, skyshell launchers for artillery across the sky, and a chord rifle (slow, high velocity) for long sightlines through the haze.
- Slam: landing after a crossing does area damage, so arriving fast is a threat as well as a risk.
What has been tried
| Game | What it did | What we take from it |
|---|---|---|
| Prey (2006) | See-through portals you can shoot through, wall-walk paths, small planetoids with their own gravity, all in a shooter. | Portals and walkable gravity work together in an FPS. That was proven twenty years ago. |
| Portal (Valve) | Texture vs stencil portal rendering, portals as clip planes, duplicate models for objects halfway through, raycasts split at portals. | The implementation playbook for §5. It is single-player, so the networking is ours to solve. |
| Splitgate 2 (1047 Games, UE5) | Launched June 2025 with a 60-player portal battle royale. It went back to beta in July, the battle royale mode was removed in September, it relaunched in December, and development ended in August 2026. | A mechanic plus a battle royale is not a game. Prove the core loop small (duels, squads) before scaling to 40 players. |
| Outer Wilds | Brittle Hollow's inner surface with a black hole at its centre that sends you to the White Hole. The DLC's Stranger is a ring world seen from the inside. | An inside-out horizon is a powerful image. A core can double as a portal. |
| Super Mario Galaxy 1 and 2 | Spherical planetoid gravity. Galaxy 1's controls flipped when Mario was upside down, and Galaxy 2 kept his head up. | Camera-relative controls and a stable "up" on screen (§3). |
| Manifold Garden | Gravity shifting and a world that wraps around, rendered with GPU-driven instancing (SIGGRAPH 2020 talk). Playtesters got lost. | Rendering a world where everything is visible, and the need for strong landmarks. |
| Orbifold (Wild Vector, UE5) | A co-op PvE shooter fought on the inner surface of spheres. Release date to be announced. | The closest match, and it is PvE. PvP, a battle royale, skin gravity and gates still look unclaimed. |
| sphereFACE, InnerSpace | A vector shooter wrapped around the inside of a sphere, and a flying game in inside-out planets with outward gravity. | Players read inside-out worlds well when the art is clear. |
| Descent, Shattered Horizon, Echo VR | Zero-g and 6DOF shooters. | Reference for the void and the Heart finale. |
How to build it
Keep the world math in one small library
The shell, the field, the gate transforms and the ray casts are a few hundred lines of closed-form math. They live in one library that the client, the server, the bots and the tools all call: sim.js, which runs the whole match (every body, weapon and bot) from inputs at a fixed 120 Hz, with no screen and no clock. The same seed and inputs give the same match in a browser or in Node. That is the best defence against prediction drift between client and server. A port to C++ or Rust (with WASM for the browser) stays open if a full server needs it; in Node a step with 100 bodies takes about 1.2 ms.
Engine
| Option | Arbitrary "up" | Notes |
|---|---|---|
| Unreal 5.4+ | SetGravityDirection on the Character Movement Component | Mature replication and prediction for a 40-player shooter. The docs say gravity direction must be synced between client and server by you. Forums report camera and replication glitches on planets. |
| Godot 4 | CharacterBody3D.up_direction; negative Area3D point gravity pushes outward | Open and quick to work in. Character bodies read gravity via get_gravity(). Networking for 40 players is more of your own work. |
| Unity | The built-in CharacterController stays Y-up; Kinematic Character Controller supports any up | Catlike Coding's custom and complex gravity tutorials cover inverted gravity spheres. |
| Custom on Jolt or Rapier | Jolt CharacterVirtual::SetUp (with an official planet sample); Rapier's controller takes any up vector | Most control, most work. Rapier also runs in the browser, which is a smooth path from this prototype. |
My recommendation: keep iterating on feel in the browser (three.js now, Rapier next) until the 2v2 test in §11 is fun. Then choose the engine. Unreal is the default for a 40-player server-authoritative shooter; Godot makes sense if the team stays small.
Rendering a world with no horizon
- From almost anywhere you can see half the world or more. That calls for hierarchical LOD and impostors for the far hemisphere, plus GPU-driven instancing in the style of Manifold Garden. The haze hides the LOD transitions.
- The Heart is a single point light at the centre, so one cube shadow map covers the entire world. Shadows fall straight "down" everywhere. Rotating shades around the Heart, like Ringworld's shadow squares, could add a moving day and night.
- Gates are the expensive part: each live gate is another scene render. The budget is capped, with distance falloff, tinted recursion and low-resolution views far away.
Netcode
- Server-authoritative, with client prediction and lag-compensated hits (Bernier 2001; Overwatch, GDC 2017). The analytic field makes prediction of free flight exact.
- Teleports need a flag so remote players don't visibly slide across the world. Source does this with an interpolation counter that increments on teleport. Better still, interpolate in the gate's frame while someone is halfway through.
- Lag-compensated rays have to split at gates, using each gate's position at the rewound time. I found no public write-up of this, so it is ours to design and test early.
- Send orientation as a full quaternion, never yaw and pitch alone. Players on the ceiling are upside down for you.
Bots and audio
- Navmesh per surface patch, plus off-mesh links for gates, lifts, slings and precomputed void jumps. The arcs are cheap to sample, so jump links can be generated offline.
- Audio needs propagation delay, distance filtering, and emitters at the exit gate for sounds that pass through. Wwise rooms and portals are a starting point, though teleport gates need custom virtual emitters.
Risks
| Risk | Mitigation | How we'll know |
|---|---|---|
| Motion sickness from flips and the void | Roll-only flips at a capped rate, comfort settings, stable heading, FOV kick only at high speed | Simulator Sickness Questionnaire after 20-minute sessions, compared with a flat-map control |
| Disorientation | Azimuthal map, landmarks, gates that keep "up", colour-coded districts | Time to navigate to a named place; how often players open the map |
| Snipers rule | Haze, canopy, hitscan range caps, delayed sound, exposure on rooftops | Distribution of kill distances; share of kills across the void |
| Upside-down readability | Silhouettes, team-colour rims, plumb lines | Time from an enemy appearing on screen to the first shot, by orientation |
| Everything is visible, which costs performance | HLOD, impostors, haze, one cube shadow map, a gate budget | Frame time on mid-range hardware with 40 players |
| Gates and netcode | Teleport flags, interpolating in the gate's frame, split rewind rays | Hit-registration errors at 100 ms ping |
| A gimmick, not a game (the Splitgate 2 lesson) | Prove 2v2 first, then squads, then a battle royale | Session length and replay rate in the 2v2 test |
Plan
- Feel prototype (this page). Movement, field, camera, gates, haze. Tune until crossing the void is fun on its own.
- Combat sandbox. Damage, three weapons, simple bots, a slam ability. Measure kill distances and sickness.
- 2v2 networked arena in a small Hollow (R 60–80 m). Prediction, lag compensation and gate netcode. This is the go or no-go on fun.
- Squads at 24 players in the Lens. The Eclipse zone, loot, Folds.
- 40-player battle royale slice at R 200 m with the drop and the Heart finale.
Open decisions
- Field events. A director that reshapes gravity for a few seconds, starting with a band of push that sweeps through the sphere. The brainstorm, with a live slice of the world and measured effects, is on its own page: Field events.
- The grapple. A third gun that fires a hook on a cable: it bites anything built or floating, reels you in while you hold, and flings you on when you let go; round a drifter or the Heart it whips you round. With it, the towns become anchors: heights tied to the void line, a crown in each town and waypoint towers along half the routes. Flights measured in the game, the rules and the townscape proposal are on The grapple.
- World size doesn't read. Changing the size in the pause menu barely changes how far away the far side looks. From inside a sphere, the far side fills the same angles at any radius, so only things with a fixed real size give the scale away, and the prototype hides two of them. The haze is normalised so the whole diameter fades the same at every size, and buildings shrink with the world between 0.55× and 1×. The options are a physical haze with a fixed density per metre (a 120 m world looks crisp, a 420 m one hazy), a partial one that scales with √size, or full-height buildings at every size. The risk is too much haze in the big worlds, so decide after playtesting both.
References
I checked each of these against its source. Where only an abstract or a secondary source was available, the entry says so.
Rendering curved and folded space
- Portals and Mirrors: Simple, Fast Evaluation of Potentially Visible Sets. Luebke & Georges, I3D 1995. doi
- Visibility Preprocessing for Interactive Walkthroughs. Teller & Séquin, SIGGRAPH 1991. doi
- Oblique View Frustum Depth Projection and Clipping. Lengyel, J. Game Development 2005. pdf
- Generalized Perspective Projection. Kooima, 2008. archived pdf
- Portal Problems. Kircher & Kohli (Valve), CS50 2018. notes
- Non-Euclidean Virtual Reality I and II. Hart, Hawksley, Matsumoto, Segerman, 2017. arXiv I · II
- Ray-marching Thurston Geometries. Coulon, Matsumoto, Segerman, Trettel, Exp. Math. 2022. arXiv
- Real-Time Visualization in Non-Isotropic Geometries. Kopczyński & Celińska-Kopczyńska, 2020. arXiv
- Body Coherence in Curved-Space Virtual Reality Games. Weeks, Computers & Graphics 2021. doi
- That's a Wrap: Manifold Garden Rendering Retrospective. Brussee, Saraev, Chyr, SIGGRAPH 2020 Talks. doi
- Visualizing Interstellar's Wormhole. James, von Tunzelmann, Franklin, Thorne, Am. J. Phys. 2015. arXiv
Geometry for maps and cameras
- The Vector Heat Method. Sharp, Soliman, Crane, ACM TOG 2019 (log map in §8.2). arXiv
- Geodesics in Heat. Crane, Weischedel, Wardetzky, ACM TOG 2013. doi
- Computation of Rotation Minimizing Frames. Wang, Jüttler, Zheng, Liu, ACM TOG 2008. doi
- Algorithms for Geodesics. Karney, J. Geodesy 2013. arXiv · triaxial: arXiv 2025
Orientation, portals and sickness
- Impossible Spaces. Suma et al., IEEE TVCG 2012. doi
- Reorientation in Virtual Environments Using Interactive Portals. Freitag, Rausch, Kuhlen, IEEE 3DUI 2014. doi
- Scene Transitions and Teleportation in VR. Rahimi Moghadam, Banigan, Ragan, IEEE TVCG 2020. doi
- Teleporting Through Virtual Environments. Kelly et al., IEEE TVCG 2020. doi
- Teleportation without Spatial Disorientation Using Optical Flow Cues. Bhandari, MacNeilage, Folmer, GI 2018. doi
- Wormholes in Virtual Space. Warren et al., Cognition 2017. doi
- Multiple Axes of Visual Rotation and Cybersickness. Bonato, Bubka, Palmisano, ASEM 2009 (abstract). record
- The Inversion Effect for Bodies. Reed et al., Psychological Science 2003. record
- Locomotion comfort guidelines. Meta Horizon developer docs. docs
Physics, networking, engines
- Shell theorem. overview
- Artificial gravity: SpinCalc and comfort data. T. Hall. SpinCalc
- Latency Compensating Methods in Client/Server In-game Protocol Design. Bernier, Valve 2001. wiki
- Overwatch Gameplay Architecture and Netcode. Ford, GDC 2017. vault
- Snapshot Interpolation. Fiedler. article
- SetGravityDirection. Unreal Engine API. docs
- CharacterBody3D and Area3D. Godot docs. body · area
- Complex Gravity. Catlike Coding. tutorial
- Jolt CharacterPlanetTest. source
Games
- Splitgate 2 history. overview · Arena-first update
- Orbifold. Steam · RPS
- Super Mario Galaxy 2, Iwata Asks. interview
- Manifold Garden GPU pipeline. SIGGRAPH blog
- Outer Wilds physics. Mobius blog
- Prey (2006). overview