FOR GAME DEVELOPERS

Stop Fighting Biased RNG.
Make Every Roll Fair.

ZPL is a mathematical API that takes any biased probability and returns a perfectly balanced output — every time, guaranteed.

What is RNG?

RNG stands for Random Number Generator. In games, every coin flip, dice roll, loot box, critical hit, and procedurally generated dungeon depends on RNG.

When you call Math.random() in JavaScript or Random.Range() in Unity, you get a number between 0 and 1. If it's below your threshold → the event happens.

// Classic RNG in games
const dropChance = 0.05;  // 5% chance

function rollLoot() {
  return Math.random() < dropChance;  // true = item drops
}

// Problem: what if dropChance gets manipulated?
// Or what if a player's "luck" stat pushes it to 0.90?
// Now your game economy is broken.

What is PRNG — and why is it a problem?

Almost every game uses a PRNGPseudo-Random Number Generator. It's not truly random. It uses a mathematical formula starting from a seed to generate numbers that look random.

TRUE RNG
Hardware Random
Based on physical phenomena — thermal noise, radioactive decay. Truly unpredictable. Expensive, slow, not available in most game engines.
Source: physical hardware
PRNG
Pseudo-Random
A math formula (Mersenne Twister, xorshift, etc.) that generates a sequence from a seed. Fast and cheap — but predictable if you know the seed.
seed=42 → always same sequence
The PRNG problem: Hackers can find the seed. Once they know the seed, they can predict every "random" drop, critical hit, or spawned enemy — breaking your game completely.

But even without hacking, PRNG has another problem: bias.

// "Luck" stat — seems fair, but breaks your game economy
function lootWithLuck(playerLuck) {
  // playerLuck ranges 0.0 (unlucky) to 1.0 (max luck)
  const baseChance = 0.05;
  const actualChance = baseChance + (playerLuck * 0.85);
  // Player with max luck: 0.05 + 0.85 = 0.90 drop rate!
  // Rare items become common → economy collapses
  return Math.random() < actualChance;
}

Biased RNG destroys game balance

Every time you add complexity to your random system — luck stats, pity mechanics, difficulty scaling, seasonal bonuses — you introduce bias. The output is no longer fair.

❌ BIASED RNG
0%
2%
10%
8%
50%
45%
90%
88%
Output = directly affected by input bias. Lucky players dominate.
✓ WITH ZPL
0%
50%
10%
50%
50%
50%
90%
50%
Output always ≈ 50% regardless of input. Everyone plays fair.

What is ZPL?

Zero Point Logic is a deterministic mathematical system that takes any biased input probability and returns an output with AIN = 1.0 — perfect equilibrium (p ≈ 0.5).

It doesn't use PRNG. It doesn't need a seed. It uses a matrix-based boolean operator system that mathematically neutralizes any bias. The result is always the same: fair.

Your biased input
bias = 0.9 (90%)
⬡ ZPL Engine
matrix equilibrium
Fair output
mean ≈ 0.5000
💡 Think of it this way: ZPL is a "bias filter." No matter how unfair the input is, the output is always mathematically balanced. You keep all your game logic — ZPL just makes the final roll fair.
{
  "ain": 1.0, // AIN score: 1.0 = perfect equilibrium (always)
  "mean": 0.5001, // Output mean: always ~0.5 regardless of input
  "std": 0.2887, // Standard deviation
  "status": "STABLE" // Equilibrium confirmed
}

The key field is mean. Use it instead of Math.random() for fair rolls. AIN = 1.0 means the system is in perfect balance.

Where to use ZPL in your game

🎁
Loot Drops
Player luck stats, pity systems, seasonal bonuses — ZPL neutralizes them all. Every player gets the same fair drop rate.
🗺️
Procedural Maps
Generate dungeons, terrain, quests. ZPL ensures balanced distributions — no more "all desert" or "all water" maps.
🛡️
Anti-Cheat
Check AIN score of observed RNG sequences. AIN < 0.99 means the sequence is manipulated — ban the player.
⚖️
Matchmaking
Balance skill ratings, card decks, team compositions. No team ever gets a statistically unfair advantage.
🎲
Casino / Card Games
Legally provably fair. ZPL gives you mathematical proof that every shuffle, roll, or deal is unbiased.

Replace Math.random() with ZPL in 5 lines

Instead of calling Math.random() directly, send the bias to ZPL and use the returned mean for your roll.

// BEFORE: biased, unfair
function lootDrop(playerLuck) {
  return Math.random() < playerLuck;  // max luck = almost always drops
}

// AFTER: ZPL-powered, always fair
async function lootDrop(playerLuck) {
  const r = await fetch('https://zpl-backend.onrender.com/compute', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', 'X-Api-Key': 'zpl_your_key' },
    body: JSON.stringify({ bias: playerLuck, N: 9, samples: 500 })
  });
  const { mean } = await r.json();
  return Math.random() < mean;  // mean ≈ 0.5 always → fair drop
}

// playerLuck=0.01 → mean≈0.5  ✓
// playerLuck=0.99 → mean≈0.5  ✓
// playerLuck=0.50 → mean≈0.5  ✓
✓ Free tier: up to 1,000 requests/month, N≤9, no API key needed for testing. Register for higher limits.

Pick your engine

Ready-to-paste code for every major game engine: