Content
| Records | Bullets, patterns, emitters, paths, actors and bullet scripts |
|---|---|
| Format | JSON, one record per file or bundled. A strict reader and writer with exact decimals and no floats. |
| Errors | Name the file, field and line, with typo suggestions |
Deterministic bullet patterns and fire control for bullet hells and shooters.
Technical details
Performance figures were measured on a mid-range laptop CPU and are quoted as measured. Where something is untested, we say so.
| Unity | 6000.0.85f1 (6.0 LTS) or later. Tested on 6000.0.85f1 and 6000.6.4f1. Unity 2022.3 isn't supported. |
|---|---|
| Render pipelines | Built-in and URP, verified in clean imports with URP 17.0.4 and 17.6.0. HDRP is not supported. |
| Platforms | Tested on Windows x64, in the editor and IL2CPP players. On other targets, build and run the DeviceCheck sample to confirm bit-exact results there. |
| Play mode | Works with Enter Play Mode Options and Domain Reload off. |
| World | 2D, on the XY plane or the XZ plane for top-down 3D scenes. |
| Math | 16.16 fixed point; 65,536 angle units per turn |
|---|---|
| Tick rate | 1 to 1000 Hz, 60 by default |
| Pools | 4096 bullets, 256 owners and 1024 scripted bullets by default (configurable) |
| Collision | Circles and capsules, swept, on 32 layers with an optional graze radius. A receiver grid broadphase changes cost, never outcomes. |
| Replays | Seed, content hash, settings hash and per-tick commands, about 15 bytes a tick, with desync checkpoints every 60 ticks |
| Records | Bullets, patterns, emitters, paths, actors and bullet scripts |
|---|---|
| Format | JSON, one record per file or bundled. A strict reader and writer with exact decimals and no floats. |
| Errors | Name the file, field and line, with typo suggestions |
| Draw path | Graphics.RenderMeshInstanced, up to 1023 bullets per call |
|---|---|
| Shader | One unlit SDF shader, no textures. Orb, needle, ring, glow and trail shapes with color, size, stretch and core. |
| Debug | Hitbox overlay. Looks are excluded from the content hash. |
| 1k bullets | 11 to 12 µs per tick |
|---|---|
| 10k bullets vs 4 receivers | 140 to 144 µs per tick |
| 20k bullets | 300 to 304 µs per tick |
| 10k bullets vs 128 receivers | 279 to 280 µs per tick |
| 10k homing bullets (worst case) | 593 to 595 µs per tick |
| Measured on | IL2CPP player, 60 Hz, Intel i5-12450H laptop. Single-threaded: no Jobs or Burst. |
| Source | Full C# source under HsSoftware.BulletHeck |
|---|---|
| Assemblies | Core (no engine references, .NET Standard 2.1), Json, Runtime, Editor, Samples, plus six test assemblies |
| Dependencies | None required. The Input System is optional for the samples. Tests compile only when the Test Framework is present. |
| Tests | 696 EditMode tests in both editors and pipelines; 650 run headless under dotnet test |
| Package | 234 files, 1.4 MB |
| License | Standard Unity Asset Store EULA |
| Networking | No network transport. The rollback sample uses an in-memory stand-in, so you choose your own transport. |
|---|---|
| Stages | No wave or timeline system. Sequencing a stage is left to your game; the Shooter sample shows one way. |
| Other | No HDRP, no 3D bullets, no multithreading |
Before you buy
No. You write ordinary decimal numbers in JSON or in the inspector, and they're parsed exactly into fixed point. You only see fixed point if you write C# against the core.
It includes what rollback needs: a deterministic world, zero-allocation snapshots and a seekable timeline. The Rollback sample shows two peers over a simulated network. The actual network transport is up to you.
Yes, for top-down or side-on play. The simulation is 2D, and the runner can map it onto the XY or XZ plane of your scene. Bullets don't move in 3D.
Yes. The included renderer draws SDF shapes with one shader, but the simulation doesn't depend on it. Read the world's bullet data and draw it however you like.
The samples draw ships, enemies and effects in code, so there's no imported art. The included enemies and the boss are data you can copy and change.
It's tested on Windows x64, in the editor and in IL2CPP players. On any other target, build and run the DeviceCheck sample to confirm bit-exact results there.
Built by HS Software with AI code assistance.