Skip to content

Latest commit

 

History

History
99 lines (69 loc) · 5.93 KB

README.md

File metadata and controls

99 lines (69 loc) · 5.93 KB

NDCell Release badge Tests badge Discord badge

NDCell logo

Any number of dimensions
Any neighborhood range
Any computable transition function

Simulate any deterministic cellular automaton

A fast, flexible, and feature-rich interactive multidimensional cellular automaton simulator written in Rust.

Downloads

Download the latest release.

To build NDCell yourself, see BUILDING.md.

Screenshots

Click to view full resolution / play video.

Gosper's Glider Gun simulated for 57 generations Catacryst simulated for 7.9 million generations WireWorld primes calculator simulated for 2.9 million generations, displaying the number 23 3D WireWorld XOR gate supporting 3-micron signals

What works right now

  • 2D and 3D rendering, simulation, and editing
  • Copy/paste
  • Save/load files

See the Changelog for the latest list of features.

What's planned for the future

In roughly descending order of priority/likelihood:

  • Everything on the short-term to-do list
  • Arbitrary range and neighborhood within a reasonable limit.
  • Custom symmetries with different cell states for each orientation. Any symmetry can be used in part or all of the transition function.
  • Custom colors and icons with several built-in presets and primitives.
  • Custom 3D models with several built-in presets and primitives.
  • Lua scripting for custom rule generators and other plugins.
  • Command-line interface for use in scripts and other automated tools.
  • Anywhere from 4 to 6 spatial dimensions supported via CLI.
  • 2D and 3D spacetime for 1D and 2D rules respectively.
  • Spacetime residue - Rules will be able to define several arbitrary "spacetime residues" (linear combination of spatial and temporal positions, modulo some value) available for use in the transition function, within some reasonable limit. This means a rule like Busy Boxes would only need 2 states instead of 7.
  • Block CA such as Margolus - This would be possible anyway with the spacetime residues above (using x + time mod 2 and y + time mod 2), but native support would improve ergonomics.
  • Custom regular tilings including hexagonal and triangular neighborhoods.
  • Reversible CA - "Go back in time" in a reversible CA, if an inverse transition function is defined.
  • Grid topology - Each axis will be able to be infinite, half-infinite, finite, looped (torus), looped with an offset (twisted torus), or flipped (Möbius loop),
  • Infinite agars and native support for "B0" rules

What's NOT planned for the future

These are things that NDCell will probably never support, in rough order from least likely to most likely:

  • More than 256 states - Original plans for NDCell included up to 2^64 states, but this particular generalization has proved much harder to support than arbitrary range or number of dimensions without significantly harming memory usage and speed for automata with 256 states or fewer, which comprise the vast majority of CA. Hopefully other features like spacetime residue will be able to curb the number of states required for most automata.
  • LtL and other "continuous" CA - Although NDCell can simulate LargerThanLife with smaller neighborhoods, continuous CA are better simulated using GPGPU. Ready is a fantastic simulator for such automata written by the Golly Gang.
  • Nondeterministic CA - Nondeterministic CA are incompatible with HashLife, which NDCell relies on for efficient simulation. It's possible that NDCell will support non-hashing simulation in the future, but nondeterministic CA would still require significant work to make usable.

Contributing

NDCell is currently under very rapid development, and a lot of things are in flux. Bug reports/fixes and minor feature requests are welcome, either via Discord or the issues tracker, but the project is currently not in a position to accept larger contributions. Ideas and feedback are always welcome on the Discord server.

License

Licensed under either of

at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.